2005.12.12 株式会社四次元データ CTO 畠中晃弘
Java言語機能(JDK5.0(Tiger)新機能) 7章 アノテーション
- 7.1. 標準アノテーション型
- 7.2. アノテーションの定義
- 7.3. 標準メタアノテーション型
7.2. アノテーションの定義
アノテーションは独自に定義することも可能です。アノテーションはクラスやインタフェースと同じようにひとつの型です。したがって、アノテーションはパッケージに属しますし、public なアノテーション型は同名のソースファイルに記述する必要があります。
アノテーションの宣言は interface の定義と似ており、「interface」の前に「@」をつけることでアノテーションの宣言となります。以下にアノテーションの定義例を示します。
public @interface Deprecated {}
これは標準アノテーション型の Deprecated アノテーションの定義の一部です。このように基本的なアノテーションは型定義の本体(中カッコで囲まれた部分)は空です。このようなアノテーションを「マーカーアノテーション」と呼びます。
アノテーション定義の本体にはメソッド宣言を記述することができます。このメソッド宣言はアノテーション型の「要素」と呼ばれます。
public @interface A { String value(); }
このアノテーションでは value という String 型の要素が定義されています。要素名は任意に指定することができますが、要素が一つしかないアノテーションでは通常「value」という名前を用います。要素の値はアノテーションの使用時に個別に設定することができます。
@A("foo") public void a() { ... }
本来は要素の値を指定するときは要素名を「@A(value="foo")」といったように指定しなければいけませんが、「value」という名前は特別に省略することができます。
アノテーションは複数の要素を定義することができますし、配列型の要素を持つこともできます。
public @interface B { String[] b(); int c(); }
このアノテーションを利用するには、たとえば次のように記述します。
@B( b={"foo","bar"}, c=10 ) public void b() { ... }