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 пуст. Что не так с моим кодом?
Ответы
Ответ 1
Добавьте в свою аннотацию следующее:
@Retention(RetentionPolicy.RUNTIME)
Из javadoc для @Retention:
политика хранения по умолчанию равна RetentionPolicy.CLASS
Из javadoc для RetentionPolicy:
-
CLASS
- Аннотации должны записываться в файл класса компилятором, но не нужно сохранять VM во время выполнения.
-
RUNTIME
- Аннотации должны быть записаны в файле класса компилятором и сохранены VM во время выполнения, поэтому они могут читаться рефлексивно.
-
SOURCE
- Аннотации должны быть отброшены компилятором.