アノテーション
http://www.syboos.jp/java/doc/annotation-summary.html
1)Javaアノテーションは注釈。Javaアノテーションはその名の通り、注釈です。クラスやメソッドなどに付与された関連情報(メタデータ)のことです。通常の場合、ソースにはビジネスロジックを書きますが、ビジネスロジック以外のものを書きたい場合、Javaアノテーションを用います。
※とは言っても、ソースに書くJavadocようなものではありません。
2)Javaアノテーションは付加情報。なので、あってもなくてもソースに書かれたビジネスロジック(プログラムの動作)に影響を与えません。
3)package, class, method, fieldなどに付加可能。
4)コンパイルされたclassファイル内にもアノテーションが残る。
アノテーション作成方法
http://www.ne.jp/asahi/hishidama/home/tech/java/annotation.html
@interface
でアノテーションを宣言できる。
1 |
public @interface SampleAnnotation { } |
Targetアノテーション を使うとアノテーションの指定場所を限定できる。
1 |
@Target(ElementType.FIELD)//フィールドにだけ付けられる指定 public @interface PlaceSampleAnnotation { } |
例えば、Override アノテーションは
1 |
@Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { } |
アノテーション情報の実行時の取得
getDeclaredAnnotations
を使う。以下サンプル
1 |
@Retention(RetentionPolicy.RUNTIME) public @interface StringAnnotation { String value(); } |
1 |
@StringAnnotation("クラスだよーん") public class サンプル { @StringAnnotation("コンストラクダ") public サンプル() { } @StringAnnotation("フィールドだでよ") public int n; @StringAnnotation("メッソド") public void function( @StringAnnotation("ひきすう") int param, @StringAnnotation("いんすう") int p2 ) { @StringAnnotation("ローカル変数ぞなもし") int a = 1; } } |
1 |
実行中にアノテーションの内容を表示する例: public static void main(String[] args) { Class clazz = サンプル.class; dump("クラス", clazz.getDeclaredAnnotations()); Constructor[] cs = clazz.getConstructors(); dump("コンストラクター", cs[0].getDeclaredAnnotations()); Field[] fs = clazz.getDeclaredFields(); dump("フィールド", fs[0].getDeclaredAnnotations()); Method[] ms = clazz.getDeclaredMethods(); dump("メソッド", ms[0].getDeclaredAnnotations()); Annotation[][] ma = ms[0].getParameterAnnotations(); dump("引数1", ma[0]); dump("引数2", ma[1]); //ローカル変数のアノテーションはどうやって取得するんだろう?? } public static void dump(String message, Annotation[] as) { System.out.println(message); for (Annotation a : as) { System.out.println(a); } } |
[通知用URL]
Tweet
最終更新時間:2012年07月17日 21時18分32秒