当前位置:网站首页>Supplément: annotation
Supplément: annotation
2022-04-23 04:27:00 【J'ai appris le silence.】
Contenu principal:
- Notes(Annotation)Généralités
- FréquentAnnotationExemple
- PersonnalisationAnnotation
- JDKMéta - Annotation dans
- Utiliser la réflexion pour obtenir des informations annotées(Dans la section réflexion, il s'agit de)
- JDK 8Nouvelles caractéristiques des annotations dans
Table des matières
Exemple 1:Générer des commentaires liés au document
Exemple 2:Vérification du format au moment de la compilation(JDKTrois notes de base intégrées)
Exemple 3:Suivre les dépendances du Code,Implémenter d'autres fonctions de profil
Exemple d'annotation personnalisée
jdk 8Nouvelles caractéristiques des annotations dans:
Exemples de notes communes
UtiliserAnnotationAjouter avant@Symbole,EtPrends ça.Annotation Comme un modificateur Utiliser.Pour modifier les éléments de programme qu'il supporte
Exemple 1:Générer des commentaires liés au document
@author:Identifier l'auteur qui a développé ces modules,Utilisé entre plusieurs auteurs,Diviser
@version:Indiquer la version de ces modules
@see:Direction de référence,C'est un sujet connexe.
@since:À partir de quelle version
@param:Description d'un paramètre dans la méthode,Impossible d'écrire sans paramètres
@returnDescription de la valeur de retour de la méthode,Si le type de valeur de retour de la méthode estvoidJe ne peux pas écrire
@exception:Description des exceptions possibles à la méthode,Si la méthode ne fonctionne pasthrowsUne exception explicitement lancée ne peut pas être écrite
Attention!:
@param @returnEt@exceptionLes trois balises sont utilisées uniquement pour les méthodes.
@paramFormat requis pour:@paramNom du paramètre type de paramètre description du paramètre
@returnFormat requis pour:@returnType de valeur de retour description de la valeur de retour
@exceptionFormat requis pour:exceptionType d'exception description de l'exception
@paramEt@exceptionPlusieurs peuvent être côte à côte
Exemple 2:Vérification du format au moment de la compilation(JDKTrois notes de base intégrées)
@Override:Méthode de superposition qualifiée des parents,Cette annotation ne peut être utilisée que pour les méthodes
@Deprecated:Utilisé pour représenter les éléments modifiés(Catégorie,Méthodes, etc.)Obsolète.Souvent parce que la structure modifiée est dangereuse ou qu'il y a de meilleures options
@SuppressWarnings:Supprimer les avertissements du compilateur
Exemple 3:Suivre les dépendances du Code,Implémenter d'autres fonctions de profil
Servlet3.oNote fournie(annotation),De sorte qu'il n'est plus nécessaire deweb.xmlDans le dossierServletDéploiement.
Commentaires personnalisés:
Références@SupperWarning
- Les commentaires sont déclarés comme suit::@interface
- Définition interne des membres,Généralement utilisévalueReprésentation
- Vous pouvez spécifier les valeurs par défaut des membres,UtiliserdefaultDéfinition
- Si l'annotation personnalisée n'a pas de membres,Indique qu'il s'agit d'une fonction d'identification.
Définir un nouveauAnnotationType d'utilisation@interfaceMots clés
Les annotations personnalisées héritent automatiquementjava.lang.annotation.AnnotationInterface
AnnotationLa variable membre pour est dans AnnotationDéclaration dans la définition sous la forme d'une méthode sans paramètres.Son nom de méthode et sa valeur de retour définissent le nom et le type du membre.Nous appelons les paramètres de configuration.Les types ne peuvent être que huit types de données de base、StringType、classType、enumType、AnnotationType、Tous les types de tableaux ci - dessus.
Peut être défini dansAnnotationSpécifiez une valeur initiale pour la variable membre de,Spécifie que la valeur initiale de la variable membre peut être utiliséedefaultMots clés
S'il n'y a qu'un seul membre du paramètre,Utilisation recommandéeLe nom du paramètre estvalue
Si l'annotation définie contient des paramètres de configuration,La valeur du paramètre doit alors être spécifiée lors de l'utilisation,Sauf si elle a une valeur par défaut.Le format est“Nom du paramètre=Valeur du paramètre”,S'il n'y a qu'un seul membre du paramètre,Et le nom estvalue,Peut être omis“value=”
Il n'y a pas de membre définiAnnotationAppeléMarquage;Contenant la variable membre AnnotationAppelé métadonnéesAnnotation
Attention!:Les annotations personnalisées doivent être accompagnées d'un processus de traitement de l'information annoté pour être significatives..
L'annotation personnalisée indique les deux métaannotations: Retention(Cycle de vie). Target(Champ d'application)
Exemple d'annotation personnalisée
public @interface MyAnnotation {
String [] value();
}
Spécifier les valeurs par défaut
public @interface MyAnnotation {
String [] value() default "hello";
}
@Override Aucun membre
public @interface Override {
}
Méta - Annotation
Notes annotées sur les notes existantes
JDKYuanAnnotationPour décorer d'autresAnnotationDéfinition
JDK5.0Offre4Standardmeta-annotationType,Respectivement.:
- Retention:Spécifier le modificateurAnnotationLe cycle de vie de:SOURCE\CLASS(Comportement par défaut)\RUNTIME Seulement déclaré commeRUNTIMECommentaires sur le cycle de vie,Peut être obtenu par réflexion.
- Target:Utilisé pour spécifier le modificateurAnnotationQuels éléments de programme peuvent être modifiés
- Les deux suivants sont moins utilisés
- Documented:Indique que l'annotation modifiée estjavadocLors de l'analyse,Garde ça.
- Inherited:Modifié par elleAnnotationSera héréditaire.

@Retention
Ne peut être utilisé que pour décorer unAnnotationDéfinition,Utilisé pour spécifier ceAnnotationLe cycle de vie de, @RententionContient unRetentionPolicyVariable membre de type,Utiliser
@RententionDoit êtrevalueLa variable membre spécifie la valeur:
- RetentionPolicy.SOURCE:Valide dans le fichier source(C'est - à - dire que le fichier source est conservé),Le compilateur rejette directement les commentaires de cette politique
- RetentionPolicy.CLASS:InclassValide dans le fichier(C'est - à - dire:classRéserve),Quand on tourneJavaHeure de la procédure,JVMLes annotations ne sont pas conservées.C'est la valeur par défaut
- RetentionPolicy.RUNTIME:Valable au moment de l'exécution(C'est - à - dire que le temps d'exécution reste),Quand on tourneJavaHeure de la procédure,JVMConserver les commentaires.Le programme peut obtenir ce commentaire par réflexion.
Par exemple@SuppressWarnings()Dans le code source
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
/**
* The set of warnings that are to be suppressed by the compiler in the
* annotated element. Duplicate names are permitted. The second and
* successive occurrences of a name are ignored. The presence of
* unrecognized warning names is <i>not</i> an error: Compilers must
* ignore any warning names they do not recognize. They are, however,
* free to emit a warning if an annotation contains an unrecognized
* warning name.
*
* <p> The string {@code "unchecked"} is used to suppress
* unchecked warnings. Compiler vendors should document the
* additional warning names they support in conjunction with this
* annotation type. They are encouraged to cooperate to ensure
* that the same names work across multiple compilers.
* @return the set of warnings to be suppressed
*/
String[] value();
}
public enum RetentionPolicy {
/**
* Annotations are to be discarded by the compiler.
*/
SOURCE,
/**
* Annotations are to be recorded in the class file by the compiler
* but need not be retained by the VM at run time. This is the default
* behavior.
*/
CLASS,
/**
* Annotations are to be recorded in the class file by the compiler and
* retained by the VM at run time, so they may be read reflectively.
*
* @see java.lang.reflect.AnnotatedElement
*/
RUNTIME
}
@Target
Pour la décorationAnnotationDéfinition,Utilisé pour spécifier le modificateurAnnotationQuels éléments de programme peuvent être modifiés.@TargetContient également unvalueVariable membre pour.
| Valeur | Valeur | ||
|---|---|---|---|
| CONSTRUCTOR | Utilisé pour décrire le constructeur | PACKAGE | Pour décrire le paquet |
| FLELD | Pour décrire le domaine | PARAMETRE | Utilisé pour décrire les paramètres |
| LOCAL_VARIABLE | Utilisé pour décrire les variables locales | TYPE | Pour décrire la classe、Interface(Inclure les types d'annotation)OuenumDéclaration |
| METHOD | Pour décrire la méthode |
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
/**
* Returns an array of the kinds of elements an annotation type
* can be applied to.
* @return an array of the kinds of elements an annotation type
* can be applied to
*/
ElementType[] value();
}
public enum ElementType {
/** Class, interface (including annotation type), or enum declaration */
TYPE,
/** Field declaration (includes enum constants) */
FIELD,
/** Method declaration */
METHOD,
/** Formal parameter declaration */
PARAMETER,
/** Constructor declaration */
CONSTRUCTOR,
/** Local variable declaration */
LOCAL_VARIABLE,
/** Annotation type declaration */
ANNOTATION_TYPE,
/** Package declaration */
PACKAGE,
/**
* Type parameter declaration
*
* @since 1.8
*/
TYPE_PARAMETER,
/**
* Use of a type
*
* @since 1.8
*/
TYPE_USE
}
@Documented
Utilisé pour spécifier l'élémentAnnotationDécoréAnnotationLa classe serajavadocL'outil est extrait dans un document.Par défaut,javadocN'inclut pas les notes.
Défini comme suit:Documented..L'annotation doit être définie pourRetentionLa valeur est:RUNTIME.
@Inherited
Modifié par elleAnnotationSera héréditaire.Si une classe est utilisée par@lnheritedDécoréAnnotation,Ses sous - classes auront automatiquement cette annotation.
- Par exemple,:Si l'étiquette est@InheritedLes annotations personnalisées annotées sont annotées au niveau de la classe,Les sous - classes héritent des annotations au niveau de la classe mère
- En application pratique,Moins utilisé
jdk 8Nouvelles caractéristiques des annotations dans:
Note répétable
@MyAnnotation(value = "hello")
@MyAnnotation(value = "hi")
class Person {
private String name;
private int age;}
C'est une erreur.
Solutions:
Injdk8Avant
1. Déclarer les valeurs dans une annotation comme un tableau de type annotation
public @interface MyAnnotations {
MyAnnotation[] value();
}
2. Placer les deux annotations dans
@MyAnnotations({@MyAnnotation(value = "hello"),@MyAnnotation(value = "hi")})
class Person {
private String name;
private int age;}
Injdk8Plus tard
InMyAnnotationDéclaration précédente@Repeatable,La valeur du membre estMyAnnotations.class
MyAnnotationDe@TargetEt@Retention@InheritedEtMyAnnotationsMême chose..
@Repeatable(MyAnnotations.class)
public @interface MyAnnotation {
String [] value() default "hello";
}
public @interface MyAnnotations {
MyAnnotation[] value();
}
@MyAnnotation(value = "hello")
@MyAnnotation(value = "hi")
class Person {
private String name;
private int age;
}
Note de type
JDK1.8Après,À propos des métaannotations@TargetType de paramètre pourElementType Plus de deux valeurs d'énumération - Oui.
- TYPE_PARAMETER
- TYPE_USE
InJava 8Avant,Les notes ne peuvent être utilisées que dans les endroits déclarés,Java8C'est parti.,Les notes peuvent être appliquées n'importe où.
- ElementType.TYPE_PARAMETERIndique que l'annotation peut être écrite dans une déclaration pour une variable de type(Par exemple::Déclaration générique)
- ElementType.TYPE_USE Indique que l'annotation peut être trouvée dans n'importe quelle instruction du type utilisé .
版权声明
本文为[J'ai appris le silence.]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204230426360531.html
边栏推荐
猜你喜欢

MATLAB lit plusieurs diagrammes fig et les combine en un seul diagramme (sous forme de sous - Diagramme)

Fusobacterium -- symbiotic bacteria, opportunistic bacteria, oncobacterium

【BIM+GIS】ArcGIS Pro2.8如何打开Revit模型,BIM和GIS融合?

Gut liver axis: host microbiota interaction affects hepatocarcinogenesis

【BIM+GIS】ArcGIS Pro2. 8 how to open Revit model, Bim and GIS integration?
![[AI vision · quick review of NLP natural language processing papers today, issue 31] Fri, 15 APR 2022](/img/40/72fdf9c89ed7d063cc368e6e052d0f.png)
[AI vision · quick review of NLP natural language processing papers today, issue 31] Fri, 15 APR 2022

阿里云IoT流转到postgresql数据库方案

Matlab reads multiple fig graphs and then combines them into one graph (in the form of sub graph)

洛谷P1858 【多人背包】 (背包求前k优解)

【测绘程序设计】坐标反算神器V1.0(附C/C#/VB源程序)
随机推荐
【BIM+GIS】ArcGIS Pro2. 8 how to open Revit model, Bim and GIS integration?
【BIM入门实战】Revit建筑墙体:构造、包络、叠层图文详解
Opencv -- yoact case segmentation model reasoning
小红书被曝整体裁员20%,大厂之间内卷也很严重
电钻、电锤、电镐的区别
Chlamydia infection -- causes, symptoms, treatment and Prevention
VHDL语言实现32位二进制数转BCD码
mysql table 中增加列的SQL语句
Nel ASA: her ø Ya facility in Norway officially opened
IEEE Transactions on Systems, Man, and Cybernetics: Systems(TSMC)投稿须知
从MySQL数据库迁移到AWS DynamoDB
[AI vision · quick review of robot papers today, issue 30] Thu, 14 APR 2022
Second kill all interval related problems
一个函数秒杀2Sum 3Sum 4Sum问题
Does China Mobile earn 285 million a day? In fact, 5g is difficult to bring more profits, so where is the money?
創下國產手機在海外市場銷量最高紀錄的小米,重新關注國內市場
A new method for evaluating the quality of metagenome assembly - magista
为什么推荐你学嵌入式
/etc/bash_completion.d目录作用(用户登录立刻执行该目录下脚本)
RuntimeError: output with shape [4, 1, 512, 512] doesn‘t match the broadcast shape[4, 4, 512, 512]