自作Javaアノテーション実装例 - サンプル01
2010/04/07 17:43Update
サンプルからJavaアノテーション実装方法について解説します。
Javaアノテーションについて、
Javaアノテーション機能 概要
■Javaアノテーション定義例
これで、属性valueを持つHelloAnnotationという名前のアノテーションが定義されます。
1)@Retention(RetentionPolicy.RUNTIME):value属性情報は実行時(ランタイム)にもVMによって保持される
2)@Target(ElementType.FIELD):注釈対象はフィールド(ElementType.FIELD)しかできない
使い方
■オプション属性の定義
上のサンプルでは、利用側は、
@HelloAnnotation("hello")
もしくは
@HelloAnnotation(value="hello")
のように、value属性を指定しないとエラーになります。
valueに設定しなくても良い【オプション属性】にするには、予めデフォルト値を設定する必要があります。
定義例:
public String value() default "";
このように定義しておけば、利用側は
@HelloAnnotation
private String name;
のようにvalueを設定しなくてもよい。もちろん、
@HelloAnnotation("何らかの値")
でもOK。
■複数の属性の定義
定義例:
■属性の型について
試しに、
のように定義してみます。
そして、以下のようにコンパイルエラーが表示されます。
注釈の属性 HelloAnnotation.value の型 Date が無効です。プリミティブ型、ストリング、ク
ラス、注釈、列挙型またはそれらの 1次元配列のみが許可されています。
アノテーションの属性の型には、intやdouble, float, booleanなどのプリミティブ型やString、Class型、アノテーション型、列挙型(enum)、及びこれらの1次元配列のみが許可されています。
※なぜなら、アノテーションはクラスやフィールド、メソッドを注釈するためのものであり、上記以外の型が許可されても、値をセットすることはできないためです。
例:
2)一元配列の定義例
3)プリミティブ型の定義例
4)列挙型(enum)の定義例
・・・
次回は、Javaアノテーションの解析(Parser)方法について解説します。
Javaアノテーション機能 概要
■Javaアノテーション定義例
package com.test.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface HelloAnnotation {
public String value();
}
これで、属性valueを持つHelloAnnotationという名前のアノテーションが定義されます。
1)@Retention(RetentionPolicy.RUNTIME):value属性情報は実行時(ランタイム)にもVMによって保持される
2)@Target(ElementType.FIELD):注釈対象はフィールド(ElementType.FIELD)しかできない
使い方
import com.test.annotation.HelloAnnotation;
public class TestHelloAnnotation {
@HelloAnnotation("hello")
//@HelloAnnotation(value="hello")
private String name;
//...
}
■オプション属性の定義
上のサンプルでは、利用側は、
@HelloAnnotation("hello")
もしくは
@HelloAnnotation(value="hello")
のように、value属性を指定しないとエラーになります。
valueに設定しなくても良い【オプション属性】にするには、予めデフォルト値を設定する必要があります。
定義例:
public String value() default "";
このように定義しておけば、利用側は
@HelloAnnotation
private String name;
のようにvalueを設定しなくてもよい。もちろん、
@HelloAnnotation("何らかの値")
でもOK。
■複数の属性の定義
定義例:
public @interface HelloAnnotation {
public String value();
public String name();
}
■属性の型について
試しに、
public @interface HelloAnnotation {
public java.util.Date value();
}
のように定義してみます。
そして、以下のようにコンパイルエラーが表示されます。
注釈の属性 HelloAnnotation.value の型 Date が無効です。プリミティブ型、ストリング、ク
ラス、注釈、列挙型またはそれらの 1次元配列のみが許可されています。
アノテーションの属性の型には、intやdouble, float, booleanなどのプリミティブ型やString、Class型、アノテーション型、列挙型(enum)、及びこれらの1次元配列のみが許可されています。
※なぜなら、アノテーションはクラスやフィールド、メソッドを注釈するためのものであり、上記以外の型が許可されても、値をセットすることはできないためです。
例:
1)java.lang.Class型の定義例
public @interface HelloAnnotation {
public Class value();
}
2)一元配列の定義例
public @interface HelloAnnotation {
public String[] value();
}
3)プリミティブ型の定義例
public @interface HelloAnnotation {
public double max();
}
4)列挙型(enum)の定義例
public @interface HelloAnnotation {
public SEX value();
enum SEX {
M,
W
}
}
・・・
次回は、Javaアノテーションの解析(Parser)方法について解説します。
Sponsored Link
- Relative Articles
- Java開発及び実行環境の構築 | Linux篇 - (2008/08/31 20:34)
- Java開発及び実行環境の構築 | Windows篇 - (2008/08/31 21:18)
- 5分でJava Hello World! - (2008/08/31 22:13)
- Java言語の制御構文 - 条件分岐if/else/else if - (2008/10/01 21:30)
- Java言語の繰り返し制御構文 - for文 - (2008/10/03 18:22)
- Java言語の繰り返し制御構文 - do ... while文 - (2008/10/03 21:23)
- Java言語の繰り返し制御構文 - while文 - (2008/10/03 21:32)
- Java言語の基礎 - javacコマンドによるコンパイル - (2008/10/10 17:58)
- Java アクセス修飾子概要 - (2008/10/29 18:31)
- Javaアノテーション機能 概要 - (2009/02/12 13:06)