Les Annotations en JAVA
Présentation
Les annotations ont été inclues en JAVA depuis la Java Standard Edition 5.0 en 2005.
En 2005, elles sont déjà utilisées par les approches XDoclet/EJBGen et d'autres encore.
Actuellement, elles sont utilisées dans leur forme officielle par les EJB3/Hibernate3.1 pour citer les plus connus.
Les annotations s'appliquent à :
- des méthodes
- des classes
- des attributs
Syntaxe
Déclaration
En Java tout est objet, une annotation est donc objet aussi. Elle se déclare de façon propre dans un fichier portant l'extension .java et portant le nom de l'annotation.Exemple : Contrainte.java
public @interface Contrainte { int minLength; int maxLength; }
Utilisation
Cet exemple illustre l'utilisation de l'annotation précedement déclarée sur une méthode.@Contrainte(minLength=3, maxlength=5) public void setName(){ //... }
Les Méta-Annotations
Ce sont des annotation qui s'appliquent aux annotations. Elles sont disponible dans java.lang.Annotation Les méta-annotations standards sont :- @Documented
- @Inhereted
- @Retention
- @Target
- @SuppressWarning
@Documented
Elle indique que l'annotation annoté par @documented doit être documentée par des tags javadoc. Javadoc prendra en compte les commentaires associés à cette annotation.
@Inhereted
L'annotation annotée est automatiquement héritée. Le fils d'un élément annoté aura donc aussi l'annotation.
@Retention
@rentention définit la politique d'usage de l'annotation annotée. Elle définit la détention de l'annotation au niveau de la JVM.
Les différentes politiques sont :
- SOURCE : Ignorer par le compilateur
- CLASS : Enregistrer dans le fichier class mais non conserver par la JVM
- RUNTIME : Enregistrer dans le fichier class et conserver par la JVM à l'éxécution, peut être lu par réflexion !
@Target
@Target définie le domaine d'application de l'annotation annotée.
Les types d'éléments pouvant être annotées sont :
- ANNOTATION_TYPE
- CONSTRUCTOR
- FIELD(inclus les constantes des enums)
- LOCAL_VARIABLE
- METHOD
- PACKAGE
- PARAMETER
- TYPE (class, interface, enum)
@SuppressWarning
Elle ne s'applique pas forcément à une annotation(l'exception qui fait la règle !).
Elle indique au compilateur de ne pas lever de warning pour des raisons de conversions non vérifiées. En particulier, cette annotation est utile pour les « Unchecked Warning » en cas de casts ou conversions impliquant des generics non vérifiable par le VM.
Il existe 2 types d'" Unchecked Warning " :
- Unchecked conversion
ArrayListlist=new ArrayList (); ArrayList raw=list;
Object o=new ArrayList(); ArrayList list=(ArrayList )o;
Les annotations standards
Elles sont disponible dans java.lang et sont les suivantes :
- @Deprecated
Redéfinit le tag Javadoc Lance un warning quand le membre annoté est utilisé.
- @Overrides
Lance une erreur si la méthode annoté ne redéfinit pas celle de sa super-classe.
Restrictions
Les annotations ne permettent pas l'héritage d'annotations.
Les méthodes d'annotation sont sans paramètres, que des couples clé/valeurs!
Il n'est pas possible de faire de gestion des exceptions avec les annotations.