アノテーションとは
クラスやメソッド、パッケージなどに対して付加情報を付与する機能。
アノテーションを自作する
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が出力されます。