GetAnnotations() пуст - программирование
Подтвердить что ты не робот

GetAnnotations() пуст

Я хотел бы использовать аннотации в своем приложении. По этой причине я создаю "привет мир" для аннотаций:

следует пример:

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() в main пуст. Что не так с моим кодом?

4b9b3361

Ответ 1

Добавьте в свою аннотацию следующее:

    @Retention(RetentionPolicy.RUNTIME)

Из javadoc для @Retention:

политика хранения по умолчанию равна RetentionPolicy.CLASS

Из javadoc для RetentionPolicy:

  • CLASS
    • Аннотации должны записываться в файл класса компилятором, но не нужно сохранять VM во время выполнения.
  • RUNTIME
    • Аннотации должны быть записаны в файле класса компилятором и сохранены VM во время выполнения, поэтому они могут читаться рефлексивно.
  • SOURCE
    • Аннотации должны быть отброшены компилятором.