web-dev-qa-db-fra.com

java annotation personnalisée: rendre un attribut facultatif

J'ai défini ma propre annotation personnalisée

@Target(value={ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation  {
    Class<?> myType();
}

comment, le cas échéant, puis-je rendre l'attribut facultatif

60
flybywire

Vous pouvez fournir une valeur par défaut pour l'attribut:

@Target(value={ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation  {
    Class<?> myType() default Object.class;
}
95
Dan Dyer

Je l'ai trouvé. Elle ne peut pas être facultative, mais une valeur par défaut peut être déclarée comme ceci:

@Target(value={ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation  {
    Class<?> myType() default String.class;
}

Si aucune valeur par défaut n'a de sens en tant que valeur "vide", c'est un problème.

3
flybywire

Pour l'attribut facultatif, vous devez fournir une valeur par défaut pour cet attribut, vous pouvez fournir une valeur par défaut à l'aide du mot clé "default".

Remarque: pour un seul attribut, vous pouvez utiliser le nom d'attribut comme valeur . Si vous utilisez votre nom d'attribut comme valeur , vous pouvez directement transmettre une valeur comme celle-ci @MyCustomAnnotation (true) au lieu de @MyCustomAnnotation (myType = true).

Voir cet exemple pour plus de détails

1
Dhiral Pandya