トップ 一覧 置換 検索 ヘルプ RSS ログイン

Javaのアノテーションについての変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!アノテーション
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
でアノテーションを宣言できる。
{{code Java,
public @interface SampleAnnotation {
}
}}
Targetアノテーション を使うとアノテーションの指定場所を限定できる。

{{code Java,
@Target(ElementType.FIELD)	//フィールドにだけ付けられる指定
public @interface PlaceSampleAnnotation {
}
}}

例えば、Override アノテーションは
{{code Java,
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
}}

!!!アノテーション情報の実行時の取得
 getDeclaredAnnotations
を使う。以下サンプル

{{code Java,
@Retention(RetentionPolicy.RUNTIME)
public @interface StringAnnotation {
	String value();
}
}}

{{code Java,
@StringAnnotation("クラスだよーん")
public class サンプル {

	@StringAnnotation("コンストラクダ")
	public サンプル() {
	}

	@StringAnnotation("フィールドだでよ")
	public int n;

	@StringAnnotation("メッソド")
	public void function(
		@StringAnnotation("ひきすう") int param,
		@StringAnnotation("いんすう") int p2
	) {

		@StringAnnotation("ローカル変数ぞなもし")
		int a = 1;
	}
}
}}

{{code Java,
実行中にアノテーションの内容を表示する例:

	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);
		}
	}
}}
{{category2 プログラミング言語,Java}}