次のような独自の注釈タイプを作成しました。
public @interface NewAnnotationType {}
それをクラスに添付します:
@NewAnnotationType
public class NewClass {
public void DoSomething() {}
}
そして、私はこのようなリフレクションを介してクラス注釈を取得しようとしました:
Class newClass = NewClass.class;
for (Annotation annotation : newClass.getDeclaredAnnotations()) {
System.out.println(annotation.toString());
}
しかし、何も印刷していません。私は何を間違えていますか?
デフォルトの保持ポリシーは RetentionPolicy.CLASS
です。これは、デフォルトでは、注釈情報が実行時に保持されないことを意味します。
注釈はコンパイラーによってクラスファイルに記録されますが、実行時にVMによって保持される必要はありません。これはデフォルトの動作です。
代わりに、 RetentionPolicy.RUNTIME
を使用します。
注釈は、コンパイラによってクラスファイルに記録され、実行時にVMによって保持されるため、リフレクティブに読み取ることができます。
... @Retention
meta-annotation を使用して指定します:
@Retention(RetentionPolicy.RUNTIME)
public @interface NewAnnotationType {
}