Les annotations ont été ajoutées en Java 5 pour fournir des métadonnées que le compilateur et divers frameworks peuvent utiliser. Initialement, elles aidaient les outils (comme JUnit ou Hibernate) à mieux interagir avec le code sans avoir à écrire de configuration répétitive ou externe.
Les annotations permettent d'ajouter des informations aux classes, méthodes, champs, paramètres et même aux variables locales. Au moment de la compilation, de l'exécution ou lors du traitement du code source, elles peuvent être utilisées pour la validation, la génération de fichiers supplémentaires, ou la modification du comportement du programme.
Pour déclarer sa propre annotation, on utilise le mot clé @interface.
Exemple de code :
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotation { String value(); } class Example { @MyAnnotation("Test") public void annotatedMethod() {} }
Caractéristiques clés :
Les annotations n'affectent-elles que l'exécution ?
Non, les annotations peuvent être limitées uniquement au code source (SOURCE), au code byte (CLASS), ou être disponibles au moment de l'exécution (RUNTIME). Leur influence dépend de RetentionPolicy.
@Retention(RetentionPolicy.SOURCE) public @interface SourceOnly {}
Les paramètres d'une annotation peuvent-ils être de n'importe quel type ?
Non, les types autorisés sont uniquement les primitifs, les chaînes, les énumérations, d'autres annotations et des tableaux de ces types. Les objets ne peuvent pas être utilisés.
Les annotations peuvent-elles être héritées ?
Strictement parlant, les annotations ne sont pas héritées comme les classes. L'exception est une annotation avec @Inherited, qui ne s'applique qu'aux classes enfants (sans affecter les méthodes).
Un développeur dans un grand projet a créé des dizaines d'annotations différentes pour automatiser les tests, sans se donner la peine de les rédiger, de les documenter et de limiter leur portée. En conséquence, un nouveau membre de l'équipe a eu du mal à comprendre quelles annotations fonctionnaient où.
Avantages :
Inconvénients :
L'équipe a mis en place une stratégie stricte pour écrire ses annotations : elles ajoutaient uniquement celles qui étaient nécessaires, décrivaient chacune en détail, et limitaient leur portée.
Avantages :
Inconvénients :