Comment puis-je faire une annotation personnalisée Java sans nom d'attribut entre parenthèses?
Je ne veux pas ceci: @annotation_name(att=valor)
. Je veux juste comme dans Servlets, c'est-à-dire:
@WebServlet("/main")
Définissez l'annotation avec un attribut nommé value
, puis l'attribut nom peut être omis:
@interface CustomAnnotation
{
String value();
}
Cela peut être utilisé comme ceci:
@CustomAnnotation("/main")
// ...
Vous spécifiez un attribut nommé value:
public @interface MyAnnotation {
String value();
}
Cela ne doit pas être le seul attribut s'ils ont des valeurs par défaut:
public @interface MyAnnotation {
String value();
int myInteger() default 0;
}
Mais si vous souhaitez attribuer explicitement une valeur à l'attribut autre que value, vous devez alors explicitement attribuer value. C'est-à-dire:
@MyAnnotation("foo")
@MyAnnotation(value = "foo", myInteger = 1)
travaux
mais
@MyAnnotatino("foo", myInteger = 1)
ne fait pas
Citation Documentation officielle des annotations :
S'il n'y a qu'un seul élément nommé
value
, alors le nom peut être omis, comme dans:
@SuppressWarnings("unchecked")
void myMethod() { }
Voici comment cette annotation est définie:
public @interface SuppressWarnings {
String[] value();
}
Comme vous pouvez le voir, la documentation n'est pas tout à fait correcte, d'autres attributs sont également autorisés (" juste un élément "), voir WebServlet
- mais celui nommé value
est traité différemment.