|
Tutorial Annotation JDK 1.5: valeurs
|  |
Technique > Annotation Java
3 - Les annotations avec valeurs 
Nous allons voir dans ce chapitre une annotation un peu plus complète, possédant des valeurs.
1- Déclarer l'annotation Auteur
L'annotation Auteur possède plusieurs valeurs: le prénom et le nomDeFamille de l'auteur.
package com.btc.tutorial.annotation1;
import java.lang.annotation.*;
// Annotation accessible à l'execution
@Retention(RetentionPolicy.RUNTIME)
// Annotation associé à un type (Classe, interface)
@Target(ElementType.TYPE)
public @interface Auteur {
String prénom();
String nomDeFamille();
} |
| Fichier: Auteur.java |
Les annotation peuvent être utilisées ou non au moment de l'execution selon la valeur de @Retention qui petu être:
@Retention=RetentionPolicy.SOURCE
Les annotations sont ignorées par le compilateur.
Dans ce cas, les annotations peuvent être utilisées par des outils de développement analysant le code source. Ce mode de fonctionnement est identique aux tags javadoc du précédent JDK (@autor, @version etc...).
@Retention=RetentionPolicy.CLASS
Les annotations sont compilées dans un .class, comme une classe ou une interface Java, mais le byte-code généré n'est pas chargé par la machine virtuelle Java au moment de l'execution. Cependant, des outils de développement peuvent charger ces annotations, évitant ainsi la tâche lourde consistant à analyser du code source Java.
@Retention=RetentionPolicy.RUNTIME
Les annotations sont compilées dans un .class, comme une classe ou une interface Java, et les annotations sont chargées par la machine virtuelle au moment de l'execution de l'application.
Les annotation peuvent être placées sur différents éléments Java selon la valeur de @Target:
@Target=TYPE
L'annotation se place sur une classe, une interface ou enum (nouveauté JDK 1.5) Java, mais pas sur une autre annotation.
@Target=FIELD
L'annotation se place sur un attribut.
@Target=METHOD
L'annotation se place sur une méthode.
@Target=PARAMETER
L'annotation se place sur le paramètre d'une méthode.
@Target=CONSTRUCTOR
L'annotation se place sur un constructuer.
@Target=LOCAL_VARIABLE
L'annotation se place sur une variable locale d'une méthode..
@Target=PACKAGE
L'annotation se place sur un package.
@Target=ANNOTATION_TYPE
L'annotation se place sur une annotation (méta annotation).
Quelques points à savoir sur la déclaration des annotations
- Les annotations peuvent n'avoir entre 0 et n membre (un membre est une méthode ou un attribut).
- Le membre d'une annotation peut être une autre annotation.
- Une annotation ne peut pas avoir un membre de son propre type.
- Contrairement aux methodes d'une interface, le membre d'une annotation peut avoir une valeur par défaut.
- Toutes les Annotation étendent implicitement l'interface java.lang.annotation.Annotation.
- Les annotation ne supportent pas l'héritage (mot clef extends interdit).
- Les annotations ne peuvent pas implémenter d'interface.
- Les méthodes des annotations ne peuvent pas avoir de paramètres .
- Les méthodes des annotations ne peuvent pas avoir d'implémentation.
- Les méthodes des annotations ne peuvent retourner que:des types Java primitif (int, double...), String, une autre annotation ou un tableau des types précédents.
- Les méthodes des annotations ne peuvent pas avoir de clause throws .
- Les méthodes des annotations ne peuvent pas être génériques (nouveauté du JDK 1.5.0) .
- Les Annotation ne peuvent pas être des types paramétrés (nouveauté du JDK 1.5).
2- Spécifier l'annotation Auteur sur la classe Entreprise
Dans l'exemple suivant, nous créons une classe Java, en ajoutant l'annotation permettant de connaitre l'auteur du code:
package com.btc.tutorial.auteur;
// Spécifier l'annotation sur la classe
@Auteur (
prénom = "Thibault",
nomDeFamille = "Cuvillier"
)
public class Entreprise {
private String _nom;
public String getNom() {
return _nom;
}
public void setNom(String nom) {
_nom = nom;
}
}
|
| Fichier: Entreprise.java |
Quelques point à savoir sur l'utilisation d'une annotation:
- Les propriétés sans valeur par défaut sont obligatoires
- Si l'annotation se trouve sans un autre package, vous devez l'importer, comme pour une classe ou interface Java.
- Vous pouvez déclarer une annotation avec les packages: @com.btc.tutorial.auteur.Auteur
3- Utiliser l'annotation Auteur
package com.btc.tutorial.auteur;
public class Main {
public static void main(String argv[]) {
// Tester si l'annotation est présente sur la classe
if( Entreprise.class.isAnnotationPresent(Auteur.class) ) {
// Récupérer une référence sur l'annotation
Auteur auteur = Entreprise.class.getAnnotation(Auteur.class);
// Récupérer les valeurs de l'annotation
System.out.print("La classe Entreprise a été dévelopée par ");
System.out.println(auteur.prénom() + " " + auteur.nomDeFamille());
}
}
} |
| Fichier: Main.java |
Simple non?
Vous devez savoir maintenant::
- qu'une annotation Java est déclarée par @interface
- que @interface n'a rien à voir avec une interface
- qu'une annotation contient des attibuts
- qu'une annotation peut être lue au moment de la compilation-déploiement ou au moment de l'execution de l'application Java
Passons à l'étape suivante pour voir un autre exemple plus complet 
|