web-dev-qa-db-fra.com

Utilisation de la déclaration @interface par défaut dans Java

Je viens de découvrir cette fonctionnalité.

La déclaration d'une interface à l'aide de la syntaxe "@interface" vous permet de mettre une valeur par défaut.

public @interface HelloWorld { 
     public String sayHello() default "hello world";
}

C'est quelque chose de nouveau pour moi. Comment cette valeur par défaut est-elle supposée être utilisée?.

Je ne trouve pas de références à cela, car le www est plein de Java documents d'interface avant l'ajout de "@" dans Java 1.5 (était-ce sur .5 ou en .4?)


MODIFIER

Merci pour les réponses (J'étais en quelque sorte proche de "annotation", car j'utilise déjà la balise): P

Je savais que j'aurais dû lire ce document il y a des années !!! ... voyons voir ...

De nombreuses API nécessitent une bonne quantité de code standard. Pour ....

52
OscarRyz

Vous venez d'écrire une annotation .

En ce qui concerne en particulier l'instruction default: elle est utilisée car les annotations et les interfaces ne peuvent pas avoir de constructeurs, c'est donc le seul moyen d'avoir une valeur par défaut pour un attribut d'annotation. De la Java Language Specification :

Un élément de type d'annotation peut avoir une valeur par défaut spécifiée pour lui. Cela se fait en suivant sa liste de paramètres (vide) avec le mot clé default et la valeur par défaut de l'élément.

Les valeurs par défaut sont appliquées dynamiquement au moment de la lecture des annotations; les valeurs par défaut ne sont pas compilées en annotations. Ainsi, la modification d'une valeur par défaut affecte les annotations même dans les classes qui ont été compilées avant la modification (en supposant que ces annotations n'ont pas de valeur explicite pour l'élément par défaut).

Je note qu'aucune des annotations de Java.lang.annotation n'utilise de valeurs par défaut, cependant.


Utilisation: Vous avez une annotation @HelloWorld Avec un attribut sayHello. Vous pouvez le mettre sur une classe comme celle-ci:

@HelloWorld(sayHello="Hi")
public class MyClass {
}

Puisque vous avez une valeur par défaut, vous pouvez simplement mettre

@HelloWorld
public class MyClass {
}

(Notez que le document dit: "Dans les annotations avec un seul élément, l'élément doit être nommé value"; je crois que la seule raison de le faire est que vous pouvez simplement écrire @HelloWorld("Hi") sans avoir à nommer le paramètre.)

Telle qu'elle est écrite, votre annotation peut être utilisée sur n'importe quel élément de programme valide (y compris les méthodes et les déclarations de variables). Vous pouvez changer cela avec l'annotation @Target .

Enfin, la définition de RetentionPolicy vous permet de décider si l'annotation doit être supprimée par le compilateur, supprimée par la machine virtuelle ou conservée en permanence.


Deux packages qui pourraient également être intéressants: javax.annotation et javax.annotation.processing . Et ici est un exemple d'utilisation du traitement d'annotation pour l'analyse du code source.

60
Michael Myers

C'est un annotation vous déclarez pas une interface. Il a été ajouté dans Java 1.5.

4
ScArcher2