アノテーション その1

アノテーションのパラメータが取れないからおかしいなと思ったら RetentionPolicy.RUNTIME の指定が無かったのか。

Wikipedia にまとめてあったので引用
http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%8E%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3

@Retention

メタアノテーション@Retentionには以下のRetentionPolicy列挙型を設定することができる。






RetentionPolicy名説明
RetentionPolicy.CLASS アノテーション情報はコンパイル時に保存されるが実行時にはVMによって保持されない。
RetentionPolicy.RUNTIME アノテーション情報はコンパイル時に保存され、実行時にもVMによって保持される。
RetentionPolicy.SOURCEアノテーション情報はコンパイル時に破棄される。ソースコード内のみで有効。

@Target

メタアノテーション@Retentionには以下のElementType列挙型を設定することができる。これは配列を使って@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE})と複数指定することができる。ただし、同じ値を{}内で複数使用するとエラーとなる。これによって型を指定することで、そのアノテーションが、どの型に対して使うことができるのかを指定できる。

ElementType名説明
ElementType.ANNOTATION_TYPE アノテーション型に指定できることを示す。
ElementType.CONSTRUCTOR コンストラクタに指定できることを示す。
ElementType.LOCAL_VARIABLE ローカル変数に指定できることを示す。
ElementType.FIELD フィールドに指定できることを示す。
ElementType.METHOD メソッドに指定できることを示す。
ElementType.PACKAGE パッケージに指定できることを示す。
ElementType.PARAMATER メソッド引数に指定できることを示す。
ElementType.TYPE クラス、またはインタフェース(アノテーション型を含む)、enum型に指定できることを示す。