Maison > Java > javaDidacticiel > le corps du texte

Un article pour vous aider à comprendre les annotations en Java

无忌哥哥
Libérer: 2018-07-23 10:45:14
original
2148 Les gens l'ont consulté

Les annotations sont quelque chose que tout développeur Java connaît, mais nous utilisons tellement d'annotations, comment nos annotations fonctionnent-elles pour nous ? Grâce à mon étude il y a quelque temps, j'ai acquis une nouvelle compréhension des annotations.

1. Que sont les annotations

Dans notre point de vue populaire, une annotation est une implémentation de l'interface Annotation. Elle est au même niveau de déclaration et d'utilisation que les classes et les interfaces. Classe de base d'objet et possède l'attribut .class.

Mais les annotations elles-mêmes fonctionnent-elles vraiment ?

Si vous n'y croyez pas, essayez de définir vous-même une annotation puis mettez-la sur votre code, le résultat sera inutile.

Nous pouvons considérer l'annotation comme une balise avec des attributs. Lorsque nous mettons cette balise sur notre code, cela signifie que notre code a certaines caractéristiques représentées par l'annotation, mais cela ne signifie pas que nous avons cette caractéristique. au moment où je l'annote.

Notre code doit être compilé avant d'être exécuté. Parfois, nous devons également compiler dynamiquement pendant l'exécution, si nous intégrons du code de réflexion ou de proxy dynamique pour analyser cette classe, et ajouter les caractéristiques qu'il devrait avoir. cette classe. À ce stade, la classe a la signification représentée par l'annotation.

Par exemple, lorsque nous étions à la maternelle, nous devions lever la main pour aller aux toilettes, et le professeur nous y a conduit. À ce moment-là, lever la main signifie que vous avez marqué l'annotation pour y aller. aux toilettes. Si le professeur ne le fait pas. Si je vous en voulais, vous ne seriez pas en mesure d'aller aux toilettes et vous devriez vous retenir. Si le professeur scanne toute la classe à ce moment-là et vous trouve en train de lever votre mains, elle ira chez vous et vous emmènera avec un groupe de camarades de classe qui lèvent tous la main. Allez aux toilettes. C’est seulement alors que vous avez développé votre capacité à aller aux toilettes.

2. Implémentation

La plupart des annotations que nous voyons ne sont pas réellement définies par Java au début. Les annotations spécifiées au début ne sont que les quatre premières méta-annotations.

  • @Documenté – si l'annotation sera incluse dans JavaDoc

  • @Retention – quand utiliser cette annotation

  • @Target – Où l'annotation est-elle utilisée ?

  • @Inherited – Si les sous-classes sont autorisées à hériter de cette annotation

@ Documentée, cette annotation signifie s'il faut mettre la description de cette classe ou méthode dans notre document java lorsque nous générons javaDoc. Généralement, cela ne sert à rien si vous n'utilisez pas l'outil de documentation de projet fourni avec Java pour générer des documents.

@Retention, cette annotation représente le cycle de vie de l'annotation que nous définissons. Voici ses différentes affectations et descriptions :

  1. RetentionPolicy.SOURCE : Lors de la phase de compilation throw. loin. Ces annotations n'ont plus de sens après compilation, elles ne sont donc pas écrites dans le bytecode. @Override, @SuppressWarnings appartiennent tous à ce type d'annotations.

  2. RetentionPolicy.CLASS : supprimé lorsque la classe est chargée. Utile pour traiter les fichiers de bytecode. Les annotations utilisent cette méthode par défaut

  3. RetentionPolicy.RUNTIME : elles ne sont jamais supprimées et l'annotation est conservée pendant l'exécution, le mécanisme de réflexion peut donc être utilisé pour lire les informations d'annotation. Nos annotations personnalisées utilisent généralement cette méthode

@Target, qui indique où l'annotation est utilisée pour marquer. La valeur par défaut est de marquer n'importe quel élément, et la valeur de ElementType peut lui être attribuée. :

  1. ElementType.CONSTRUCTOR : utilisé pour décrire le constructeur

  2. ElementType.FIELD : variables membres, objets, propriétés (y compris les instances d'énumération)

  3. ElementType.LOCAL_VARIABLE : utilisé pour décrire les variables locales

  4. ElementType.METHOD : utilisé pour décrire les méthodes

  5. ElementType.PACKAGE : utilisé pour décrire les packages

  6. ElementType.PARAMETER : utilisé pour décrire les paramètres

  7. ElementType.TYPE : utilisé pour décrire les classes et les interfaces (y compris les types d'annotation) ou la déclaration enum

@Inherited définit la relation entre l'annotation et la sous-classe. La méta-annotation @Inherited est une annotation de marque @Inherited qui élabore sur un. certaines annotations sont héritées. Si un type d'annotation modifié avec @Inherited est utilisé pour une classe, cette annotation sera utilisée pour les sous-classes de cette classe.

Nous pouvons personnaliser une annotation :

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * 水果名称注解
 */
@Target(FIELD)
@Retention(RUNTIME)
@Documented
public @interface FruitName {
    String value() default "";
}
Copier après la connexion

La méta-annotation ci-dessus est destinée aux services d'annotation personnalisés.

3.Résumé

En bref, une annotation est une marque utilisée pour marquer le code. Nous pouvons implémenter différentes méthodes d'annotation en analysant différentes annotations, nous pouvons facilement obtenir. le contenu de nos balises d'annotation pour faire fonctionner les classes ou méthodes que nous avons écrites. Dans le prochain article, je définirai une annotation personnalisée et j'écrirai son implémentation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal