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

Javaの独自のアノテーションを作成して値を取得するサンプルです。
2つサンプルがあります。
1.クラスに独自のアノテーションを付ける
2.メソッドに独自のアノテーションを付ける

目次

1.クラスに独自のアノテーションを付ける

クラスに独自のアノテーションを付けるサンプルです。
アノテーションのクラスを作成し、別のクラスに付けます。
アノテーションの内容は、値の設定と取得ができるものです。

1-1.アノテーションのクラスを作成

アノテーションのクラスです。

package test1;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

// @Retentionは、アノテーションを保持する範囲
@Retention(RetentionPolicy.RUNTIME)

// @Targetは、アノテーションを適用する場所
@Target({ 
	ElementType.TYPE,
	ElementType.FIELD,
	ElementType.CONSTRUCTOR,
	ElementType.METHOD 
})
// 作成するアノテーション名の前に@interfaceをつける。
public @interface TestAnnotation1 {
	String version() default "1";
	String author();
}

1-2.クラスにアノテーションを付ける

4行目でクラスにアノテーションを付けています。
13行目からはリフレクションを使用して値を取得しています。

package test1;

// クラスに独自のアノテーション(@TestAnnotation1)を付けている
@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 annnotation1 = 
				(TestAnnotation1)c1.getAnnotation(TestAnnotation1.class);
		// アノテーションの値を表示
		System.out.println(annnotation1.version()); // 1.05
		System.out.println(annnotation1.author()); // taro
	}
}

2.メソッドに独自のアノテーションを付ける

クラスに独自のアノテーションを付けるサンプルです。
アノテーションのクラスを作成し、メソッドに付けます。
アノテーションの内容は、値の設定と取得ができるものです。

2-1.アノテーションのクラスを作成

アノテーションのクラスです。

package test1;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

// @Retentionは、アノテーションを保持する範囲
@Retention(RetentionPolicy.RUNTIME)

// @Targetは、アノテーションを適用する場所
@Target({ ElementType.METHOD })

// 作成するアノテーション名の前に@interfaceをつける。
public @interface TestAnnotation1 {
	String value() default "1";
}

2-2.メソッドにアノテーションを付ける

7行目でメソッドにアノテーションを付けています。
15行目からはリフレクションを使用して値を取得しています。

package test1;

import java.lang.reflect.Method;

class Sample1 {
	// メソッドに独自のアノテーション(@TestAnnotation1)を付けている
	@TestAnnotation1("2.01")
	public void print() {
		System.out.println("test");
	}
}
public class Test1 {
	public static void main(String[] args) throws Exception {
		// リフレクションを使用
		Method method = Sample1.class.getMethod("print", new Class[] {});
		TestAnnotation1 annnotation2 =
		(TestAnnotation1) method.getAnnotation(TestAnnotation1.class);
		// アノテーションの値を表示
		System.out.println(annnotation2.value()); // 2.01
	}
}

@Retention

@Retentionは、アノテーションを保持する範囲です。

説明
RetentionPolicy.RUNTIME アノテーションを実行時も保持する。リフレクションを使えば情報の取得が可能。
RetentionPolicy.CLASS @Retentionがない場合、この値がデフォルトになる。アノテーションはクラスファイルに保持されるが実行時には保持されない。
RetentionPolicy.SOURCE アノテーションはソースファイルに保持されるがクラスファイルには保持されない。

@Target

@Targetは、アノテーションを適用する場所です。
以下はサンプルで使用しているメタアノテーションです。

説明
ElementType.TYPE クラス、インターフェース、アノテーション、enum型
ElementType.FIELD フィールド
ElementType.CONSTRUCTOR コンストラクタ
ElementType.METHOD メソッド

独自のアノテーション

関連の記事

Java 標準アノテーションのサンプル



△上に戻る