Java注解(二)
2021/6/9 22:22:07
本文主要是介绍Java注解(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
上篇文章简单的介绍了注解的2个基本属性;
- 1.在什么地方使用注解(由@target来决定);
- 2.注解保留到什么时候(由@Retation决定);
了解了这2个基础的属性,加一点反射的知识就可以自定义一个简单的注解;这篇文章主要是介绍一下注解的另一些简单的东西:元注解,自定义注解@interface
元注解
用于注解 自定义注解 的注解。
- @Target
- @Retention
- @Inherited
- @Documented
- @Repeatable (java1.8 新增)
@Target
指定注解的位置;target的值是一个数组类型,也就是说可以定义多个值;有多个值时,用{},每个值之间使用",";只有一个值时可以不用{}
@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(); }
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD,ElementType.TYPE}) public @interface MyAnno { boolean NOTNULL() default false; } @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface MyAnno { boolean NOTNULL() default false; }
@Retention
注解保留到什么时候,是定义注解的生命周期;
@Documented
注解使用了@Documented的注解,在用过该注解的类中,用javadoc命令生成API文档后idea生成doc文档,文档中会显示注解信息;有点绕,下面直接看图;
自定义注解类使用:
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @Documented public @interface MyAnno { boolean NOTNULL() default false; }
用了@MyAnno 的类AnnoTest
public class AnnoTest { @MyAnno(NOTNULL = true) public String name; @MyAnno public String id; @MyAnno(NOTNULL = true) public int number; }
AnnoTest 生成的javadoc文档,自定义注解MyAnno使用@Documented和不使用@Documented的对比
@Inherited
继承性,当自定义注解注解@MyAnno使用了@Inherited ,使用过@MyAnno注解的类:Father,其子类Son可以获取到@MyAnno的信息;
@Repeatable
可重复注解;什么意思呢?如果没有该注解,同一个地方不能重复出现2次及以上的该注解;
@MyAnno(NOTNULL = true) @MyAnno(NOTNULL = true) public String name; 如果MyAnno没有@Repeatable,这种写法就会报错, 在MyAnno上添加@Repeatable,这种写法就不会报错;
自定义注解
注解的本质其实是一个Annotation接口,所有的注解类都会继承这个接口;
也就是说注解中其实是可以有属性和方法,但是接口中的属性都是static final的,对于注解来说没什么意义,而我们定义接口的方法就相当于注解的属性;这也是为什么注解变量会有括号;
注解的属性类型:
- 1.基本类型
- 2.String
- 3.enum枚举
- 4.Class类型
- 5.注解
- 6.以上类型的一维数组
这篇关于Java注解(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南