Javaの独自のアノテーションを作成して値を取得するサンプルです。
目次
サンプル | 独自のアノテーションの作り方 |
1.独自のアノテーションのサンプル | |
2.1のアノテーションをクラスに付ける | |
3.1のアノテーションをメソッドに付ける |
独自のアノテーションの作り方
1.作成するアノテーション名の前に@interfaceをつけます。
public @interface アノテーション名{ } |
2.アノテーションを保持する範囲を指定します。
@Retention(アノテーションを保持する範囲) |
@Retantionの引数は、アノテーションを保持する範囲です。
値 | 説明 |
---|---|
RetentionPolicy.RUNTIME | アノテーションを実行時も保持します。リフレクションを使うとアノテーションの情報を取得できます。 |
RetentionPolicy.CLASS | アノテーションはクラスファイルに保持されますが実行時には保持されません。@Retentionがない場合は、この値がデフォルトです。 |
RetentionPolicy.SOURCE | アノテーションはソースファイルに保持されますがクラスファイルには保持されません。 |
3.アノテーションを適用する場所を指定します。
@Target(アノテーションを適用する場所) |
@Targetの引数は、アノテーションを適用する場所です。
値 | 説明 |
---|---|
ElementType.TYPE | クラス、インターフェース、アノテーション、enum型に適用します。 |
ElementType.FIELD | フィールドに適用します。 |
ElementType.CONSTRUCTOR | コンストラクタに適用します。 |
ElementType.METHOD | メソッドに適用します。 |
以下は、Java8 API仕様のAnnotation Typesのリンクです。
https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.6
1.独自のアノテーションのサンプル
独自のアノテーションです。値の設定と取得ができます。
package test1;
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.TYPE,
ElementType.METHOD
})
public @interface TestAnnotation1 {
String version() default "1";
String author();
}
8行目の@Retentionは、アノテーションを保持する範囲です。
RetentionPolicy.RUNTIMEは、アプリケーション実行時に値を取得します。
10行目の@Targetは、アノテーションを適用する場所です。クラスとメソッドです。
14行目は、TestAnnotation1というアノテーションです。
2.1のアノテーションをクラスに付ける
public <A extends Annotation> A getAnnotation(Class<A> annotationClass) |
1で作成したアノテーションをクラスに付けるサンプルです。
package test1;
@TestAnnotation1(version = "1.05", author = "taro")
class Sample1 {
public void print() {
System.out.println("test");
}
}
public class Test1 {
public static void main(String[] args) throws Exception {
Class<?> c1 = Class.forName("test1.Sample1");
TestAnnotation1 a1 =
(TestAnnotation1)c1.getAnnotation(TestAnnotation1.class);
if(a1.version().equals("1.05")) {
System.out.println("1.05です"); //1.05です
}
if(a1.author().equals("taro")) {
System.out.println("taroです"); //taroです
}
}
}
3行目は、クラスにアノテーションを付けています。
12行目は、アノテーションの値を取得するためにリフレクションを使用しています。
14行目は、getAnnotationメソッドでアノテーションを取得しています。
16,19行目は取得したアノテーションの値をif文で判定しています。
3.1のアノテーションをメソッドに付ける
public Method getMethod(String name,Class<?>... parameterTypes) throws NoSuchMethodException,SecurityException |
1で作成したアノテーションをメソッドに付けるサンプルです。
package test1;
import java.lang.reflect.Method;
class Sample1 {
@TestAnnotation1 (version = "2.01", author = "jiro")
public void print() {
System.out.println("test");
}
}
public class Test1 {
public static void main(String[] args) throws Exception {
Class<?> c1 = Class.forName("test1.Sample1");
Method method = c1.getMethod("print", new Class[] {});
TestAnnotation1 b1 =
(TestAnnotation1) method.getAnnotation(TestAnnotation1.class);
if(b1.version().equals("2.01")) {
System.out.println("2.01です"); //2.01です
}
if(b1.author().equals("jiro")) {
System.out.println("jiroです"); //jiroです
}
}
}
6行目は、メソッドにアノテーションを付けています。
14-25行目は、アノテーションの値を取得するためにリフレクションを使用しています。
18行目は、getAnnotationメソッドでアノテーションを取得しています。
20,23行目は取得したアノテーションの値をif文で判定しています。
関連の記事