2008.03.12

アノテーションとは

久しぶりにJavaのプログラムに触れる機会があり、
新しいJavaのプログラムネタを書こうかと思います。

実は、今回初めてJ2SE5.0を使用してみました。
そこで、いまさらですがアノテーションを利用したので、
アノテーションについて書きます。

まず、アノテーションとは、なんぞやと思い調べてみました。
ほとんどのサイトでは、以下のような説明がされていました。
「クラスやメソッド、フィールドなどのプログラム要素に対して、プログラム的に意味づけを行うものです。」
この説明を読んで、私は、プログラム的に意味づけ=コメントみたいなものかと思いました。
ところが、このアノテーションというものは、コンパイルされたプログラムの中に情報として残るため、
プログラムから参照可能なのです。そこが、コメントとは大きく異なる点です。
また、あくまでもコメント的な位置づけなので、プログラムコードに記述しているにもかかわらず、
プログラムの挙動には影響を及ぼさないのです。

以下に、アノテーションを作成した例を記載しておきます。

アノテーションを利用するには、アノテーションの型を宣言する必要があります。
アノテーションの宣言は @interface キーワードを用います。

(1)TestAnnotationというアノテーションの型を宣言しています。
----------------------------------------------------------------------
// ↓アノテーションの配置方法を宣言しています。
// 下記の宣言をしておくと、アノテーションがコンパイラによって
//  クラスファイルに記録され実行時に参照可能になります。
//  この宣言がないと、アプリケーション実行時にプログラムから参照できません。
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
}
----------------------------------------------------------------------

(2)TestAnnotationというアノテーションをクラスとフィールドに宣言しています。
----------------------------------------------------------------------
@TestAnnotation
public class TestBean {

  @TestAnnotation
  public String value = "";

}
----------------------------------------------------------------------


(3)TestBeanクラスのアノテーションを参照します。
----------------------------------------------------------------------
/**
* @param args
*/
public static void main(String[] args) throws Exception {
  
  Class clazz = TestBean.class;
  Annotation[] clazzAnnotations = clazz.getDeclaredAnnotations();
  for (int i1 = 0; i1 < clazzAnnotations.length; i1++) {
    if ( clazzAnnotations[i1] instanceof TestAnnotation ) {
      System.out.println("クラスに宣言しているTestAnnotationです。");
    }
  }

  Field fd = clazz.getField("value");
  Annotation[] fdAnnotations = fd.getDeclaredAnnotations();
  for (int i1 = 0; i1 < fdAnnotations.length; i1++) {
    if ( fdAnnotations[i1] instanceof TestAnnotation ) {
      System.out.println("フィールドvalueに宣言しているTestAnnotationです。");
    }
  }


}
----------------------------------------------------------------------

(4)実行結果
----------------------------------------------------------------------
クラスに宣言しているTestAnnotationです。
フィールドvalueに宣言しているTestAnnotationです。
----------------------------------------------------------------------


以上のように、アノテーションはアプリケーション実行時にプログラムから参照できることがわかっていただけたかと思います。
では、このアノテーションというもは、どのようなに使用するのでしょうか?
代表的な使用方法としては、クラスなどのプログラム部品を開発した開発者、開発企業、著作権情報などの埋め込みや、
一般的なJavaのフレームワークに見られる、設定ファイルの各種設定をアノテーションで代替したりする等です。

実際のアプリケーションで、アノテーションを活用した例については、
次回のエントリで紹介しようかと思います。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
ykato