web-dev-qa-db-ja.com

Javaでクラス注釈を取得する方法は?

次のような独自の注釈タイプを作成しました。

public @interface NewAnnotationType {}

それをクラスに添付します:

@NewAnnotationType
public class NewClass {
    public void DoSomething() {}
}

そして、私はこのようなリフレクションを介してクラス注釈を取得しようとしました:

Class newClass = NewClass.class;

for (Annotation annotation : newClass.getDeclaredAnnotations()) {
    System.out.println(annotation.toString());
}

しかし、何も印刷していません。私は何を間違えていますか?

38
John Smith

デフォルトの保持ポリシーは RetentionPolicy.CLASS です。これは、デフォルトでは、注釈情報が実行時に保持されないことを意味します。

注釈はコンパイラーによってクラスファイルに記録されますが、実行時にVMによって保持される必要はありません。これはデフォルトの動作です。

代わりに、 RetentionPolicy.RUNTIME を使用します。

注釈は、コンパイラによってクラスファイルに記録され、実行時にVMによって保持されるため、リフレクティブに読み取ることができます。

... @Retention meta-annotation を使用して指定します:

@Retention(RetentionPolicy.RUNTIME)
public @interface NewAnnotationType {
}
46
Matt Ball