45

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

public @interface NewAnnotationType {}

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

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

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

Class newClass = NewClass.class;

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

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

4

2 に答える 2

53

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

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

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

注釈は、コンパイラによってクラス ファイルに記録され、実行時に VM によって保持されるため、反射的に読み取られる可能性があります。

...@Retentionメタアノテーションを使用して指定します。

@Retention(RetentionPolicy.RUNTIME)
public @interface NewAnnotationType {
}
于 2013-07-28T13:39:37.770 に答える