« Programmation Java/Annotations » : différence entre les versions

Contenu supprimé Contenu ajouté
+
+
Ligne 7 :
== Fonctionnement ==
 
Toute entité (classe, interface, méthode ou champ) peut être précédée d'une ou plusieurs annotations contenant des méta-données renseignant le compilateur ou documentant l'entité.
== Balises existantes ==
 
=== Syntaxe ===
La syntaxe d'une annotation est la suivante :
@''annotation-type[ (name''=''value) * ]''
La liste des paramètres entre parenthèse est optionnelle (vide par défaut). Elle contient une série de valeurs associées à un nom de champ définit par l'annotation.
 
Exemple 1 :
<source lang="java">
@Author(
name = "Moi",
date = "02/01/2009"
)
class MyClass() { }
</source>
 
Exemple 2 :
<source lang="java">
@Override
void uneMethode() { }
</source>
 
== Annotations existantes ==
Beaucoup d'annotation complètent les balises spéciales pour la documentation Javadoc.
 
=== @Deprecated ===
Cette annotation marque une entité obsolète.
Son utilisation génère un avertissement à la compilation.
 
=== @Override ===
Cette annotation marque une méthode redéfinie.
 
=== @SuppressWarnings ===
Cette annotation signale au compilateur de supprimer certains avertissements à la compilation de l'entité.
 
Exemple 1 : pour supprimer les avertissements d'utilisations de méthodes obsolètes :
<source lang="java">
@SuppressWarnings("deprecation")
void uneMethode() { methodeObosolete(); }
</source>
 
Exemple 2 : pour supprimer les avertissements d'utilisations de méthodes obsolètes et d'utilisation de méthodes sans vérification de types (une version de la méthode avec types générique est préférable afin que le type d'élément soit vérifié) :
<source lang="java">
@SuppressWarnings({"unchecked", "deprecation"})
void uneMethode()
{
Vector v=new Vector();
methodeObosolete();
}
</source>
 
== Créer de nouvelles annotations ==
La création est similaire à celle d'une classe.
 
=== Syntaxe ===
@interface ''identifiant'' {
''type champ() ['' default ''valeur ]'';
}
 
Exemple de définition:
<source lang="java">
@interface InfoClasse
{
String auteur();
int revision() default 1;
String[] references();
}
</source>
 
Exemple d'utilisation:
<source lang="java">
@InfoClasse( auteur="Moi", references={"Reference1","Reference2"} )
class UneClasse { }
</source>
 
=== Documentation pour Javadoc ===
Si l'annotation définit des informations à afficher dans la documentation générée par Javadoc, la définition de l'annotation doit utiliser l'annotation <tt>@Documented</tt>.*
 
Correction de l'exemple précédent :
<source lang="java">
@Documented
@interface InfoClasse
{
String auteur();
int revision() default 1;
String[] references();
}
</source>
 
=== Informations disponibles à l'exécution ===
Pour que les informations d'une annotation soit disponible à l'exécution, il faut annoter sa définition avec <tt>@Retention(RetentionPolicy.RUNTIME)</tt>.
 
Exemple :
<source lang="java">
import java.lang.annotation.*;
 
@Retention(RetentionPolicy.RUNTIME)
@interface AnnotationPourExecution
{
// Éléments d'information disponibles à l'exécution
}
</source>
 
=== Restreindre l'utilisation d'une annotation ===
La définition d'une annotation peut être annotée avec <tt>@Target</tt> pour spécifier avec quels types d'élément l'annotation peut être utilisée.
 
La classe <tt>java.lang.annotation.ElementType</tt> définit les différents types qu'il est possible d'annoter.
 
Exemple :
<source lang="java">
import java.lang.annotation.*;
 
@Target(ElementType.ANNOTATION_TYPE)
@interface PourAutreAnnotation
{
}
 
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.TYPE})
@interface InfoMembreOuType
{
// Type = class/interface/enum
}
</source>
 
[[Catégorie:Programmation Java (livre)]]