アノテーションの定義

アノテーションは、@interface を使って、

public @interface Developer {}

アノテーションのメンバは、メソッド形式で定義される。
そのメソッドには以下の制約がある。

  • 引数なし
  • 例外なし(throws)
  • 戻り値は、プリミティブ型、String型、Class型、enum型、アノテーション、左記の型の配列
public @interface Developer {
    int id();
    String name();
    String date();
    Class[] favoriteClasses();
}

メンバには初期値を持たせることができる。

public @interface Developer {
    int id();
    String name() default "no name";
    String date() default "1900/01/01";
    Class[] favoriteClasses() default {java.util.HashMap.class, java.util.List.class};
}

上記のアノテーションは、以下のように使用できる。

@Developer(
    id = 1000,
    name = "Yamada Taro",
    date = "2004/10/21",
    favoriteClasses = {java.lang.System.class, java.io.FileInputStream.class}
)
public class Hoge {
    ・・・
}

defaultの定義がないものは省略が可能。

@Developer(
    id = 1000
)
public class Hoge {
    ・・・
}

また、valueというメンバは特殊で、例えば以下のようにNoteアノテーションを定義すると、

public @interface Note {
    String value();
}

value=XXXって書かないで値を指定できる。

・・・
    @Note("メソッドの説明")
    public void hello() {
    }
・・・