发布于2021-06-12 14:06 阅读(865) 评论(0) 点赞(14) 收藏(0)
上篇文章简单的介绍了注解的2个基本属性;
了解了这2个基础的属性,加一点反射的知识就可以自定义一个简单的注解;这篇文章主要是介绍一下注解的另一些简单的东西:元注解,自定义注解@interface
用于注解 自定义注解 的注解。
指定注解的位置;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;
}
注解保留到什么时候,是定义注解的生命周期;
注解使用了@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的对比
继承性,当自定义注解注解@MyAnno使用了@Inherited ,使用过@MyAnno注解的类:Father,其子类Son可以获取到@MyAnno的信息;
可重复注解;什么意思呢?如果没有该注解,同一个地方不能重复出现2次及以上的该注解;
@MyAnno(NOTNULL = true)
@MyAnno(NOTNULL = true)
public String name;
如果MyAnno没有@Repeatable,这种写法就会报错,
在MyAnno上添加@Repeatable,这种写法就不会报错;
注解的本质其实是一个Annotation接口,所有的注解类都会继承这个接口;
也就是说注解中其实是可以有属性和方法,但是接口中的属性都是static final的,对于注解来说没什么意义,而我们定义接口的方法就相当于注解的属性;这也是为什么注解变量会有括号;
注解的属性类型:
原文链接:https://blog.csdn.net/m0_37550986/article/details/117751965
作者:快起来搬砖啦
链接:http://www.javaheidong.com/blog/article/222026/5b323ae0333fce3a661a/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!