2012-09-28 11 views
16

私のアプリケーションで注釈を使用したいと思います。getAnnotations()が空です

は、たとえば、次のとおりです:このような理由から、私は、注釈のための "Hello World" を作成

public class HelloAnnotation 
{ 
    @Foo(bar = "Hello World !") 
    public String str; 

    public static void main(final String[] args) throws Exception 
    { 
     System.out.println(HelloAnnotation.class.getField("str").getAnnotations().length); 
    } 
} 

そして、これは注釈です:

import java.lang.annotation.ElementType; 
import java.lang.annotation.Target; 

@Target(ElementType.FIELD) 
public @interface Foo 
{ 
    public String doTestTarget(); 
} 

私の問題は今、メインでgetAnnotationsは()であるということです空の。私のコードで何が間違っていますか?

+3

まあ、一つの問題は、あなたがFoo' @ 'という名前のアノテーションを使用することですが、あなたは' @ Test_Target'と呼ばれる注釈を定義します。コンパイルしたコードを投稿するのが普通です(* David Grant *が答えをくれましたが)。 – parsifal

+0

はい、確かに、私はそれをすでに編集しています。それはコピーと貼り付けの間違いだった:) –

答えて

33

あなたの注釈に以下を追加します。

@Retention(RetentionPolicy.RUNTIME) 

のjavadocから@Retentionのために:

を保持ポリシーのデフォルトRetentionPolicy.CLASS

RetentionPolicyのJavadocから:

  • CLASS
    • 注釈はコンパイラによってクラスファイルに記録されることになるが、は、実行時にVMによって保持される必要はありません。
  • RUNTIME
    • 注釈は、彼らが反射的読み取ることができるので、、コンパイラによってクラスファイルに記録され、実行時にVMによって保持されることになります。
  • SOURCE
    • 注釈はコンパイラによって破棄されることになります。