2012-02-22 9 views
2

カスタム注釈で注釈を付けられたすべてのフィールドを検索しようとしていますが、それを検出していないようです。 @Deprecatedのような標準アノテーションでも同じコードが正常に動作します。再現するJava:プライベートメンバーのアノテーションを取得

最小限のコード:

public class MyClass { 

    public @interface MyAnnotation {} 

    @MyAnnotation Object someObject; 
    @MyAnnotation @Deprecated Object someDeprecatedObject; 
    @Deprecated Object aThirdObject; 

    public static void main(String[] args) { 
     Class<?> cls = MyClass.class; 

     for (Field field : cls.getDeclaredFields()) { 
      System.out.print(field.getName()); 

      for (Annotation a : field.getDeclaredAnnotations()) 
       System.out.print(" " + a); 

      System.out.println(); 
     } 
    } 
} 

が出力:

someObject 
someDeprecatedObject @java.lang.Deprecated() 
aThirdObject @java.lang.Deprecated() 

@Deprecatedはアップしますが、@MyAnnotationはしません!助けて!

答えて

5

デフォルトでは、アノテーションは実行時に保持されないため、反映することはできません。ランタイムに存在することを確認するには、アノテーションを宣言する必要があります。

@Retention(RetentionPolicy.RUNTIME) 
public @interface MyAnnotation { 
} 
+0

パーフェクト。 9分で受け入れます。ありがとう! – slezica

関連する問題