Les annotations
Les annotations en Java sont des marqueurs qui permettent d'ajouter des méta-données aux classes, aux méthodes, aux attributs, aux paramètres, aux variables, aux paquets ou aux annotations elles-mêmes.
Les annotations sont utilisées dans des domaines divers. Leur intérêt principal est de fournir une méta-information qui pourra être exploitée par un programme.
Utilisation des annotations
Une annotation est un type (comme une classe ou une interface) du langage Java : elle peut être référencée par son nom complet ou importée depuis un autre paquet grâce au mot-clé import.
Une annotation n'est pas instanciée, elle est simplement accolée à l'élément qu'elle vient enrichir :
Certaines annotations déclarent des attributs (par exemple l'annotation javax.servlet.annotation.WebServlet)
Par convention, si un attribut de l'annotation s'appelle value et qu'il est le seul paramètre spécifié, alors son nom peut être omis pour plus de lisibilité.
Un nombre très limité d'annotations sont exploitées directement par le compilateur.
On trouve les annotations déclarées dans le paquet java.lang :
- Deprecated
- Override
- SuppressWarnings
- SafeVarargs (introduite en Java 7)
Déclaration d'une annotation
Une annotation implémente implicitement Annotation et rien d'autre !
Les attributs d'une annotation peuvent être uniquement :
- Un type primitif,
- une chaîne de caractères (java.lang.String),
- une référence de classe (java.lang.Class),
- une Annotation (java.lang.annotation.Annotation),
- un type énuméré (enum),
- un tableau à une dimension d'un de ces types.
Le mot-clé default permet de spécifier une valeur d'attribut par défaut.
Une annotation peut elle-même être annotée. Les annotations d'annotation fournies par Java 7 sont :
Rétention d'une annotation
Une annotation est définie par sa rétention, c'est-à-dire la façon dont une annotation sera conservée. Les différentes rétentions d'annotation sont :
- source
- L'annotation est accessible durant la compilation mais n'est pas intégrée dans le fichier class généré.
- class
- L'annotation est accessible durant la compilation, elle est intégrée dans le fichier class généré mais elle n'est pas chargée dans la JVM à l'exécution.
- runtime
- L'annotation est accessible durant la compilation, elle est intégrée dans le fichier class généré et elle est chargée dans la JVM à l'exécution. Elle est accessible par introspection.