19

アプリケーションで注釈を使用したいと思います。このため、注釈用に「helloworld」を作成します。

次の例:

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();
}

私の問題は、mainのgetAnnotations()が空になっていることです。私のコードの何が問題になっていますか?

4

1 に答える 1

43

アノテーションに以下を追加します。

    @Retention(RetentionPolicy.RUNTIME)

@Retentionのjavadocから:

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

RetentionPolicyのjavadocから:

  • CLASS
    • 注釈はコンパイラによってクラスファイルに記録されますが、実行時にVMによって保持される必要はありません
  • RUNTIME
    • 注釈は、コンパイラによってクラスファイルに記録され、実行時にVMによって保持されるため、反射的に読み取ることができます
  • SOURCE
    • 注釈はコンパイラによって破棄されます。
于 2012-09-28T14:48:56.380 に答える