アノテーション その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型に指定できることを示す。 |