Java 独自のアノテーションを作成して値を取得するサンプル

Javaの独自のアノテーションを作成して値を取得するサンプルです。

目次

独自のアノテーション

@Retention(アノテーションを保持する範囲)
@Target(アノテーションを適用する場所)
public @interface アノテーション名{
}
  • @Retantionの引数は、アノテーションを保持する範囲です。
説明
RetentionPolicy.RUNTIME アノテーションを実行時も保持します。リフレクションを使うとアノテーションの情報を取得できます。
RetentionPolicy.CLASS アノテーションはクラスファイルに保持されますが実行時には保持されません。@Retentionがない場合は、この値がデフォルトです。
RetentionPolicy.SOURCE アノテーションはソースファイルに保持されますがクラスファイルには保持されません。
  • @Targetの引数は、アノテーションを適用する場所です。
説明
ElementType.TYPE クラス、インターフェース、アノテーション、enum型に適用します。
ElementType.FIELD フィールドに適用します。
ElementType.CONSTRUCTOR コンストラクタに適用します。
ElementType.METHOD メソッドに適用します。

以下、3つのサンプルがあります。
1.独自のアノテーションを作成する
2.1で作成したアノテーションをクラスに付ける
3.1で作成したアノテーションをメソッドに付ける

 

1.独自のアノテーションを作成する

アノテーションの内容は、値の設定と取得ができるものです。取得した値はif文で使用できます。

8行目の@Retentionは、アノテーションを保持する範囲です。アプリケーション実行時に値を取得したいので引数はRetentionPolicy.RUNTIMEにしています。
10行目の@Targetは、アノテーションを適用する場所です。今回のサンプルはクラスとメソッドのみなのでElementType.TYPEとElementType.METHODのみでもいいです。
16行目は、TestAnnotation1というアノテーションです。

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.FIELD,
	ElementType.CONSTRUCTOR,
	ElementType.METHOD 
})
public @interface TestAnnotation1 {
	String version() default "1";
	String author();
}

 

2.1で作成したアノテーションをクラスに付ける

1で作成したアノテーションをクラスに付けるサンプルです。

3行目でクラスにアノテーションを付けています。
12-21行目は、アノテーションの値を取得するためにリフレクションを使用しています。
Java リフレクションのサンプル
14行目は、getAnnotationメソッドでアノテーションを取得しています。
16,19行目は取得したアノテーションの値をif文で判定しています。

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.1で作成したアノテーションをメソッドに付ける

1で作成したアノテーションをメソッドに付けるサンプルです。

6行目でメソッドにアノテーションを付けています。
14-25行目は、アノテーションの値を取得するためにリフレクションを使用しています。
Java リフレクションのサンプル
18行目は、getAnnotationメソッドでアノテーションを取得しています。
20,23行目は取得したアノテーションの値をif文で判定しています。

package test1;

import java.lang.reflect.Method;

class Sample1 {
	@TestA1(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[] {});
		
		TestA1 b1 =
		(TestA1) method.getAnnotation(TestA1.class);

		if(b1.version().equals("2.01")) {
			System.out.println("2.01です"); //2.01です
		}
		if(b1.author().equals("jiro")) {
			System.out.println("jiroです"); //jiroです
		}
	}
}

 

関連の記事

Java 標準アノテーションのサンプル
Java リフレクションのサンプル

△上に戻る