当前位置:网站首页>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
边栏推荐
- Microbial neuroimmune axis -- the hope of prevention and treatment of cardiovascular diseases
- 小红书被曝整体裁员20%,大厂之间内卷也很严重
- 无线充电全国产化电子元件推荐方案
- C语言: 指针的进阶
- 229. 求众数 II
- Who will answer the question?
- Thought of reducing Governance -- detailed summary of binary search
- 上海航芯技术分享 | ACM32 MCU安全特性概述
- Redis 命令大全
- QT program integration easyplayer RTSP streaming media player screen flicker what is the reason?
猜你喜欢
Why recommend you to study embedded
MYSQL去重方法汇总
STM32单片机ADC规则组多通道转换-DMA模式
Common string processing functions in C language
[echart] Introduction to echart
[BIM introduction practice] Revit building wall: detailed picture and text explanation of structure, envelope and lamination
Network principle | connection management mechanism in TCP / IP important protocol and core mechanism
HMS Core Discovery第14期回顾长文|纵享丝滑剪辑,释放视频创作力
【NeurIPS 2019】Self-Supervised Deep Learning on Point Clouds by Reconstructing Space
A new method for evaluating the quality of metagenome assembly - magista
随机推荐
【BIM+GIS】ArcGIS Pro2.8如何打开Revit模型,BIM和GIS融合?
win10, mysql-8.0.26-winx64.zip 安装
现货黄金基本介绍
Mysql---数据读写分离、多实例
A new method for evaluating the quality of metagenome assembly - magista
现货黄金操作技巧_估波曲线
shell wc (统计字符数量)的基本使用
【BIM入门实战】Revit建筑墙体:构造、包络、叠层图文详解
使用大华设备开发行AI人流量统计出现时间不正确的原因分析
Does China Mobile earn 285 million a day? In fact, 5g is difficult to bring more profits, so where is the money?
伦敦银最新价格走势图与买卖点
Cortex-M3寄存器组、汇编语言与C语言的接口介绍
Leetcode->1 两数之和
Apache Bench(ab 压力测试工具)的安装与使用
在AWS控制台创建VPC(无图版)
[Li Hongyi 2022 machine learning spring] hw6_ Gan (don't understand...)
Fusobacterium -- symbiotic bacteria, opportunistic bacteria, oncobacterium
Go 语言中的 logger 和 zap 日志库
秒杀所有区间相关问题
C语言: 指针的进阶