アノテーション (J2SE5.0以降)

とりあえずJavaに組み込まれてるアノテーションの説明から。

標準アノテーション

Override

メソッドに付けられる。

Class SuperHoge {
  public void hoge() {}
}

Class ChildHoge extends SuperHoge {
  @Override public int hoge() {}
}

見てわかると思うが、@Overrideがアノテーションで、hoge()メソッドがオーバーライドされてないと、コンパイル時にエラーとなる。

Deprecated

メソッドに付けられる。使い方は@Overrideと一緒。
そのメソッドが非推奨であることを表す。
-Xlint:deprecation オプションを付けてコンパイルすると、コンパイルエラー時により詳しい情報が表示される。(らしい)

標準メタアノテーション

アノテーションを定義するアノテーション

Target

どの要素につけるアノテーションかを定義する。入れる値はJava.lang.annotation.ElementType で定義されていて、次のとおり。

TYPEクラス・インタフェース・enumアノテーションの宣言に付与
METHODメソッドの宣言に付与
FIELDフィールドの宣言に付与

まだいっぱいあるけど書くのメンドイので省略。てか、テーブルの表示と書き方が微妙。

Retention

アノテーションの情報をどの段階まで保持するか。
入れる値はjava.lang.annotation.RetentionPolicy で定義されてる。


SOURCE・・・ソースコードまで保持
CLASS・・・.classファイルにも保持される。デフォルト値。
RUNTIME・・・実行時にもJVMにロードされる

Documented

マーカアノテーション
javadocなどで作成したドキュメントにアノテーションの情報が反映されなければならないことをあらわす。

Inherited

マーカアノテーション
これがついたアノテーションを親クラスにつけると子クラスにも継承されることを表す。

アノテーションの定義例

以上をふまえ、Deprecatedの一部抜粋。
多分見ればわかる。

package java.lang;

import java.lang.annotation.*;

@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Deprecated {
}

メンドくさくなったのでここで終了。多分かなりの確率で使うことはないだろう。