web-dev-qa-db-fra.com

Comment puis-je faire une annotation Java comme @name ("Luke") sans attribut entre parenthèses?

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")
41
Lucas Batistussi

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")
// ...
46
pb2q

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

27
Doug Moscrop

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.

12
Tomasz Nurkiewicz