アノテーションとは
クラスやメソッド、パッケージなどに対して付加情報を付与する機能。
アノテーションを自作する
import static java.lang.annotation.ElementType.TYPE;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;
@Retention(RUNTIME)
@Target(TYPE)
public @interface TestAnnotation {
String testValue();
}
@Retention
アノテーションの情報が保持される範囲を指定します。
-
SOURCE
コンパイラによって破棄される。 -
CLASS
コンパイラによってクラスファイルに記録されるが、実行時には読み込まれない。(デフォルト) -
RUNTIME
コンパイラによってクラスファイルに記録され、実行時に読み込まれる。
@Target
アノテーションの適用可能場所を指定します。
-
TYPE
クラス、インターフェースまたは列挙型宣言 -
FIELD
フィールド宣言 -
METHOD
メソッド宣言 -
PARAMETER
メソッドの引数宣言 -
CONSTRUCTOR
コンストラクター宣言 -
LOCAL_VARIABLE
ローカル変数宣言 -
ANNOTATION_TYPE
アノテーション宣言 -
PACKAGE
パッケージ宣言 -
TYPE_PARAMETER
型引数宣言 -
TYPE_USE
型が使用されている場所 -
MODULE
モジュール宣言
@interface
アノテーションを定義します。
自作したアノテーションを付与する
@TestAnnotation(testValue = "test value")
public class AnnotatedClass {
}
今回はクラスに対してアノテーションを付与しています。
アノテーションの情報を出力する
public class GetValue {
public static void main(String[] args) {
try {
Class<?> targetClass = Class.forName("AnnotatedClass");
var testAnnotation = (TestAnnotation) targetClass.getAnnotation(TestAnnotation.class);
System.out.println(testAnnotation.testValue());
} catch (Exception e) {
// 例外に対する処理
}
}
}
実行するとtest valueが出力されます。