web-dev-qa-db-fra.com

Comment obtenir une annotation de classe en Java?

J'ai créé mon propre type d'annotation comme ceci:

public @interface NewAnnotationType {}

et l'a attaché à une classe:

@NewAnnotationType
public class NewClass {
    public void DoSomething() {}
}

et j'ai essayé d'obtenir l'annotation de classe via une réflexion comme celle-ci:

Class newClass = NewClass.class;

for (Annotation annotation : newClass.getDeclaredAnnotations()) {
    System.out.println(annotation.toString());
}

mais il n'imprime rien. Qu'est-ce que je fais mal?

38
John Smith

La stratégie de rétention par défaut est RetentionPolicy.CLASS ce qui signifie que, par défaut, les informations d'annotation ne sont pas conservées lors de l'exécution:

Les annotations doivent être enregistrées dans le fichier de classe par le compilateur mais ne doivent pas être conservées par le VM au moment de l'exécution. Il s'agit du comportement par défaut.

Utilisez plutôt RetentionPolicy.RUNTIME :

Les annotations doivent être enregistrées dans le fichier de classe par le compilateur et conservées par le VM au moment de l'exécution, afin qu'elles puissent être lues de manière réfléchie.

... que vous spécifiez à l'aide de @Retention méta-annotation :

@Retention(RetentionPolicy.RUNTIME)
public @interface NewAnnotationType {
}
46
Matt Ball