注释(annotation)(代码片段)

lotz lotz     2022-12-21     582

关键词:

注释可以在编译、类加载、运行时被读取,并执行相应的处理。Annotation可以像修饰符一样使用,可以修饰包、类、构造器、方法、成员变量;、参数、局部变量。访问和处理Annotation的工具成为APT。

1)基本Annotation

  @Override @Deprecated @SuppressWarnings

① 限定重写父类方法:@Override

用来指定方法重写,可以强制子类覆盖父类的方法。程序编译时会告诉编译器检查这个方法,如果没有被重写,则会编译出错。

② 标示已过时:@Deprecated

用于表示某个程序元素(类、方法等)已过时,当其他程序使用已过时的类、方法时,编译器将会给出警告 。

③ 抑制编译器警告:@SuppressWarnings

指示被Annotation标识的程序元素(以及该程序元素中的所有子元素)取消显示指定的编译器警告。

2)自定义Annotation

定义新的Annotation类型使用@interface关键字,如:

//定义一个简单的Annotation类型
public
@interface Test

之后便可以在程序的任何地方来使用该Annotation,通常可用于修饰程序中的类、方法、变量、接口等。

Annotation可以带成员变量,成员变量在Annotation定义中以无参数方法的形式来声明,其方法名和返回值定义了该成员变量的名字和类型,如:

public @interface Test
    //定义两个成员变量的Annotation
    //Annotation中的成员变量以方法的形式来定义
    String name();
    int age();

可以看出,Annotation和接口定义非常相像。如果Annotation里定义了成员变量之后,使用该Annotation时应该为成员变量指定值。可以在定义Annotation的成员变量时指定初始值,利用default关键字,如:

public @interface Test
    //定义两个成员变量的Annotation
    //Annotation中的成员变量以default指定初始值
    String name() default "xx";
    int age() default 32;

指定默认值后,便可以直接使用默认值,无须指定成员变量的值。如果定义的Annotation类型里只有一个value成员变量时,可以直接在Annotation后的括号里指定value成员变量的值,无须使用name=value形式。

利用Annotation可以借助反射工具,实现相应的绑定、测试等功能。

3)JDK的元Annotation

① @Retention

用于指定该Annotation可以保留多长时间,可取值有:

RetentionPolicy.CLASS:编译器将把注释记录在class文件中,当运行java程序时,JVM不再保留注释,这是默认值。

RetentionPolicy.RUNTIME:编译器将把注释记录在class文件中,当运行java程序时,JVM保留注释,程序可以通过反编译获取该注释。

RetentionPolicy.SOURCE:编译器直接丢掉这种策略的注释。

② @Target

用于指定Annotation能用于修饰哪些程序元素,其值有:

ElementType.ANNOTATION_TYPE:只能修饰Annotation

ElementType.CONSTRUCTOR:修饰构造器

ElementType.FIELD:修饰成员变量

ElementType.LOCAL_VARIABLE:只能修饰局部变量

ElementType.METHOD:只能修饰方法

ElementType.PACKAGE:只能修饰包

ElementType.PARAMETER:修饰参数

ElementType.TYPE:可以修饰类、接口(包括注释类型)、枚举。

③ @Documented

表示Annotation类将被javadoc工具提取成文档

④ @Inherited

表示Annotation具有继承性:如果某个类使用了A Annotation(使用@Inherited修饰)修饰,则其子类将自动具有A注释。

4)应用

Android ButterKnife

项目编译时对源代码进行扫描检测找出存活时间为RetentionPolicy.CLASS的指定注解,然后对注解进行解析处理,进而得到要生成的类的必要信息,然后根据这些信息动态生成对应的 java 类,由于它是在编译时对注解进行解析完成相关代码的生成,所以在项目编译时会略耗时,但不会影响运行时的性能。

proguard混淆时保留注释(@类内容)(代码片段)

  吾一直以为注释是没用的,结果同事说出问题了。那就保留吧:#保留Annotation-keepattributes*Annotation* 查看详情

annotation非人类物种基因组注释(msu为例)(代码片段)

基因组注释工具ANNOVAR是一款非常好用的注释软件,功能强大,输出数据简单美中不足就是对于非人类物种来说UI不够完善,因此总结一下整个注释的过程,帮助别人快乐自己。首先我们需要明确我们需要的数据和软件:数据包括... 查看详情

在java中实现annotation是一个坏主意吗?(代码片段)

...,但我找不到合适的答案。手头的用例是为特定的自定义注释创建一个实现类,以便在运行时我可以简单地生成它而不是POJO。例如:注解:@interfaceCustomAnnotationStringdate();在这个阶段,我需要一个恰好与注释具有相同字段的bean。... 查看详情

oo第三单元总结(代码片段)

...基础?JML是用于对Java程序进行规格化设计的一种表示语言注释结构JML以javadoc注释的方式来表示规格,每行都以@起头。有两种注释方式,行注释和块注释。其中行注释的表示方式为//@annotation,块注释的方式为/*@annotation@*/。按照Jav... 查看详情

androidapt(代码片段)

APTAPT(AnnotationProcessingTool)是一种处理注释的工具,它对源代码文件进行检测找出其中的Annotation,使用Annotation进行额外的处理。Annotation处理器在处理Annotation时可以根据源文件中的Annotation生成额外的源文件和其它的文件(文件具体内... 查看详情

如何从注释标注xcode9设置警报(代码片段)

我试图在注释标注中有一个按钮,按下时会发出警报。编译器不会抛出任何错误,但程序似乎永远不会进入该特定的mapView函数。这是功能:extensionViewControllerfuncmapView(_mapView:MKMapView,viewForannotation:MKAnnotation)->MKAnnotationView?//2guardl... 查看详情

什么是注解?(代码片段)

...  -不是程序本身,可以对程序做出解释。(这一点,跟注释没什么区别)    -可以被其他程序(比如:编译器等)读取。(注解信息处理流程,是注解和注释的重要区别。如果没有注解信息处理流程,则注解毫无意义)Annotation... 查看详情

注解annotation(代码片段)

1、注解1.1、注解,或者叫做注释类型,英文单词是:Annotation  1.2、注解Annotation是一种引用数据类型。编译之后也是生成xxx.class文件。1.3、怎么自定义注解呢?语法格式?  [修饰符列表]@interface注解类型... 查看详情

使用 annotator.js 的注释无法正常工作

】使用annotator.js的注释无法正常工作【英文标题】:Annotationsusingannotator.jsisnotworkingproperly【发布时间】:2017-09-0217:56:26【问题描述】:我正在使用annotator.js并将范围存储在mysql中。对于突出显示文本,我在我的代码文件中使用此... 查看详情

java注解详解(annotation)(代码片段)

什么是java注解注解是java5的新特性。注解可以看做一种注释或者元数据(MetaData),可以把它插入到我们的java代码中,用来描述我们的java类,从而影响java类的行为。Java注解的目的使用Java注解一般来说主要有... 查看详情

springboot集成springcache(代码片段)

...下springboot集成springcache做缓存,springcache是基于annotation(注释)的一个缓存技术特点总结如下:通过少量的配置annotation注释即可使得既有代码支持缓存支持开箱即用Out-Of-The-Box,即不用安装和部署额外第三方组件即可使用缓存支... 查看详情

anotation注解(代码片段)

...细介绍、示例说明) 摘要JavaAnnotation是JDK5.0引入的一种注释机制。网上很多关于JavaAnnotation的文章,看得人眼花缭乱。JavaAnnotation本来很简单的,结果说的人没说清楚;弄的看的人更加迷糊。我按照自己的思路,对Annotation进行... 查看详情

annotation(代码片段)

...新特征。中文名称一般叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。  更通俗的意思是为程序的元素(类、方法、成员变量)加上更直... 查看详情

ssm-@transactional注释不生效(代码片段)

1.在applicationConext.xml中配置事务注解驱动<!--事务注解驱动--><tx:annotation-driven/><!--配置事务--><beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager 查看详情

注释的基本使用与文档注释的特殊功能

注释与注解(Annotation)的区别:   注释:解释说明程序代码,并帮忙调试错误(给程序设计师阅读的)文字   注解(Annotation):用于给计算机解释说明的程序注释分类  单行注释:  //单行注释提示  多行注释:  /*多行注释提... 查看详情

java注释annotations作用

Java注释Annotations作用不是注释,是注解,注释是你自己用//标识的,编译的时候不转化为字节码文件,对编译器来讲,注释没有实际意义。Annotations为注解,是编译器可以理解的部分,对编译有实际意义,就像重写@Override或者对... 查看详情

spring安全注释预期为内联常量(代码片段)

当我尝试在@Secured注释之外定义我的String时,我在grails中得到以下错误。我得到以下错误Role.USER'是一个java.lang.String类型的内联常量,而不是@grails.plugin.springsecurity.annotation.Secured中的属性表达式classRolefinalstaticStringUSER="ROLE_USER"final... 查看详情

注解+反射+递归动态生成多层xml(代码片段)

...性,需要帮助实体类识别其他的成员实体类,代码如下:注释xml帮助类importjava.lang.annotation.Documented;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotat 查看详情