トップ 差分 一覧 ソース 置換 検索 ヘルプ PDF 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

でアノテーションを宣言できる。

1
2
public @interface SampleAnnotation {
}

Targetアノテーション を使うとアノテーションの指定場所を限定できる。

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

例えば、Override アノテーションは

1
2
3
4
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

アノテーション情報の実行時の取得

getDeclaredAnnotations

を使う。以下サンプル

1
2
3
4
@Retention(RetentionPolicy.RUNTIME)
public @interface StringAnnotation {
String value();
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@StringAnnotation("クラスだよーん")
public class サンプル {

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
実行中にアノテーションの内容を表示する例:

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);
}
}
[カテゴリ: プログラミング言語 > Java]



  • Hatenaブックマークに追加
  • livedoorクリップに追加
  • del.icio.usに追加
  • FC2ブックマークに追加

最終更新時間:2012年07月17日 21時18分32秒