導入
Java 5およびその上位バージョンはアノテーションを使用して、プログラム内にメタデータを含ませる方法をサポートします。Groovy 1.1以上のバージョンでは、そのようなアノテーションをサポートしています。
アノテーションは、ツールやライブラリに情報を提供するために使用されています。それらは、メタデータ情報の提供を宣言するスタイルが許可されており、直接ソースコードに埋め込みできるように許可されています。それ以外では、そのような情報は非宣言手段を使用するか、外部ファイルを使用して提供する必要があります。ここでは、いつアノテーションを使うのが適正かといったようなガイドラインを議論するつもりはありません。Groovyでアノテーションを使用する方法を足早にご紹介することとしましょう。
アノテーションは、Javaのクラスファイルによく似た構文で定義されますが、@interfaceキーワードを使用するところが異なります。例として、ここでは FeatureRequest アノテーションのJavaでの定義を見てみましょう。
このアノテーションは、問題追跡ツールがよく取り扱うような情報を表しています。次のようにGroovyファイルでこのアノテーションを使用することができます。
さて、このアノテーションを理解できるツールやライブラリがあった場合、このソースファイル(またはコンパイル結果のクラスファイル)を処理し、メタデータをベースに機能させることができます。
同様に、独自のアノテーションを定義することができます。多くのアノテーションを使用する既存のツール、ライブラリ、およびフレームワークがあります。このページの末尾にあるいくつかの例をご参照下さい。ほんの一例として、ここでは、HibernateやJPAでどのようにアノテーションを使用することができるかをご紹介します。
例
別の例として、XStreamの例を考えてしましょう。XStreamはJava(とGroovy)オブジェクトをXMLにシリアライズするライブラリです(必要に応じて逆に戻すこともできます)。以下は、アノテーションなしで使用する例です。
結果は次のような出力となります。
ほんの余談ですが。アノテーションに関連していない場合のファイルへの書き出し方法は以下のようになります。
そして、以下は読み込んで戻す方法です。
では、アノテーションに話を戻しましょう...
XStreamでは生成されるXMLを、より細かく制御することができます(デフォルト値が気に入らない場合)。これは、API呼び出しを介して、またはアノテーションで行うことができます。Groovyクラスにどのように結果のXMLを変更するためのXStreamにアノテーションを付けて行くかを見て行きましょう。実行すると、次のように出力されます。
実行すると、次のように出力されます。
Javaとの相違点
アノテーションにはリストを含めることができます。Groovyでこのようなアノテーションを使用する場合は、Javaで中括弧が使われていた部分を、中括弧ではなくGroovyでサポートされている角括弧を使うようにして下さい。
上記は以下のようになります。
その他の例
アノテーションは、以下のページに含まれている例でも使用されています。