54 votes

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

Je viens de découvrir cette fonctionnalité.

La déclaration d'une interface en utilisant le "@" interface syntaxe 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 est la valeur par défaut suppose d'être utilisé.

Je ne trouve pas de références à ce que, parce que le web est complète de l'interface java des documents avant le "@" plus dans Java 1.5 ( c'était sur .5 ou dans .4? )

Merci pour les réponses à l'avance.


MODIFIER

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

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

De nombreuses Api nécessite une bonne quantité de code réutilisable. Pour....

... et oh, regarde, il y a un cochon volant autour de la rhubarbe arbre!

:)

63voto

Michael Myers Points 82361

Vous avez juste écrit une annotation.

Concernant l' default relevé en particulier: elle est utilisée parce que 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 une annotation de l'attribut. De la Java Language Specification:

Une annotation de type élément peut avoir une valeur par défaut est spécifié. Ceci est fait par la suite de son (vide) liste des paramètres avec le mot-clé default et la valeur par défaut de l'élément.

Les valeurs par défaut sont appliquées de manière dynamique à la fois les annotations sont en lecture; les valeurs par défaut ne sont pas compilées dans les annotations. Ainsi, la modification d'une valeur par défaut affecte les annotations même dans les classes qui ont été compilées avant le changement a été fait (en supposant ces annotations manque une valeur explicite pour la valeur par défaut de l'élément).

Je remarque qu'aucun des annotations en java.lang.annotation utiliser les valeurs par défaut, si.


Utilisation: Vous avez une annotation @HelloWorld avec un attribut sayHello. Vous pourriez le mettre sur une classe comme ceci:

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

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

@HelloWorld
public class MyClass {
}

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

Comme l'écrit, votre annotation peut être utilisée sur aucun élément de programme (y compris les méthodes et les déclarations de variables). Vous pouvez changer cela avec l' @Target d'annotation.

Enfin, la définition de la RetentionPolicy vous permet de décider si l'annotation doit être rejeté par le compilateur, rejeté par la VM, ou de rester toujours.


Deux forfaits qui pourrait être intéressant aussi: javax.annotation et javax.annotation.la transformation. Et ici est un exemple de l'utilisation de l'annotation de traitement pour l'analyse du code source.

4voto

ScArcher2 Points 22118

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X