大数据必学Java基础(八十六):元注解的深入了解

举报
Lansonli 发表于 2022/12/13 11:47:47 2022/12/13
956 0 0
【摘要】 元注解的深入了解元注解是用于修饰其它注解的注解。举例:JDK5.0提供了四种元注解:Retention, Target, Documented, Inherited一、Retention@Retention:用于修饰注解,用于指定修饰的那个注解的生命周期,@Rentention包含一个RetentionPolicy枚举类型的成员变量,使用@Rentention时必须为该value成员变量指定...

元注解的深入了解

元注解是用于修饰其它注解的注解。

举例:

JDK5.0提供了四种元注解:Retention, Target, Documented, Inherited

一、Retention

@Retention:用于修饰注解,用于指定修饰的那个注解的生命周期,

@Rentention包含一个RetentionPolicy枚举类型的成员变量,使用

@Rentention时必须为该value成员变量指定值:

RetentionPolicy.SOURCE:在源文件中有效(即源文件保留),编译器直接丢弃这种策略的注释,在.class文件中不会保留注解信息

案例:

反编译查看字节码文件:发现字节码文件中没有MyAnnotation这个注解:

RetentionPolicy.CLASS:在class文件中有效(即class保留),保留在.class文件中,但是当运行Java程序时,他就不会继续加载了,不会保留在内存中,JVM不会保留注解。如果注解没有加Retention元注解,那么相当于默认的注解就是这种状态。

案例:

反编译看字节码文件,字节码文件中带有MyAnnotation注解:

RetentionPolicy.RUNTIME:在运行时有效(即运行时保留),当运行 Java程序时,JVM会保留注释,加载在内存中了,那么程序可以通过反射获取该注释。

二、Target

用于修饰注解的注解,用于指定被修饰的注解能用于修饰哪些程序元素。

@Target也包含一个名为value的成员变量。

案例:

@Target({TYPE,CONSTRUCTOR,METHOD})
public @interface MyAnnotation4 {
}

使用:

三、Documented(很少)

用于指定被该元注解修饰的注解类将被javadoc工具提取成文档。默认情况下,javadoc是 不包括注解的,但是加上了这个注解生成的文档中就会带着注解了

案例:

如果:Documented注解修饰了Deprecated注解

那么Deprecated注解就会在javadoc提取的时候,提取到API中:

四、Inherited(极少)

被它修饰的Annotation将具有继承性。如果某个类使用了被

@Inherited修饰的Annotation,则其子类将自动具有该注解。

案例:

注解:如果MyAnno注解使用了@Inherited之后,就具备了继承性,那么相当于子类Student也使用了这个MyAnno

父类:

子类:

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。