120 votes

Annotations

Quel est le but des annotations en Java? J'ai cette idée floue d'eux comme quelque part entre un commentaire et le code réel. Affectent-ils le programme au moment de l'exécution?

Quels sont leurs usages typiques?

Sont-ils uniques à Java? Existe-t-il un équivalent C ++?

86voto

Anders Sandvig Points 7964

Les Annotations sont principalement utilisés par le code qui est en train d'inspecter un autre code. Ils sont souvent utilisés pour la modification (c'est à dire de décoration ou d'habillage) classes existantes au moment de l'exécution pour modifier leur comportement. Des cadres comme JUnit et Hibernate annotations, de réduire la quantité de code que vous devez écrire vous-même à utiliser les cadres.

Oracle a une bonne explication du concept et de sa signification en Java sur leur site.

17voto

Konrad Rudolph Points 231505

Aussi, sont-ils uniques à Java, est-il un C++ équivalent?

Non, mais en VB et C# ont des attributs qui sont la même chose.

Leur utilisation est très variée. Un typique exemple Java, @Override n'a pas d'effet sur le code, mais il peut être utilisé par le compilateur pour générer un avertissement (ou une erreur) si la décorées méthode n'est pas réellement remplacer une autre méthode. De même, les méthodes peuvent être marquée comme obsolète.

Ensuite, il y a de la réflexion. Lorsque vous réfléchissez un type de classe dans votre code, vous pouvez accéder aux attributs et d'agir selon les informations qu'on y trouve. Je ne connais pas d'exemples en Java, mais en .NET il est utilisé par le compilateur pour générer de la(dé)sérialisation d'informations pour les classes, de déterminer la disposition de la mémoire de structures et de déclarer les importations de fonction de l'héritage des bibliothèques (entre autres). Ils contrôlent également comment l'IDE concepteur de formulaire fonctionne.

/EDIT: Attributs de classes sont comparables à la balise interfaces (comme la Sérialisation en Java). Cependant, l' .NET des directives de codage de dire de ne pas utiliser la balise interfaces. Aussi, ils ne fonctionnent que sur le niveau de la classe, pas sur le niveau de la méthode.

14voto

Eli Courtwright Points 53071

Anders donne un bon résumé, et voici un exemple d'annotation JUnit

 @Test(expected=IOException.class)
public void flatfileMissing()
    throws IOException
{
    readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}
 

L'annotation @Test indique ici à JUnit que la méthode flatfileMissing est un test à exécuter et que le résultat attendu est une exception IOException levée. Ainsi, lorsque vous exécuterez vos tests, cette méthode sera appelée et le test réussira ou échouera selon qu'une exception IOException est levée ou non.

7voto

pek Points 6412

Java dispose également de l’outil de traitement des annotations (apt) dans lequel vous créez non seulement des annotations, mais vous décidez également du fonctionnement de ces annotations sur le code source.

Voici une introduction.

5voto

Scott Stanchfield Points 15863

Pour voir des choses intéressantes que vous pouvez faire avec Annotations, consultez mes processeurs d'annotation et JavaBean .

Ils sont parfaits pour générer du code, ajouter des validations supplémentaires lors de votre construction, et je les utilise également pour un framework de messages d'erreur (non encore publié - besoin d'être clarifié avec les patrons ...).

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