会飞的小飞象
2017-12-19 15:51
自定义注解中的成员变量为什么后面要加括号?
一楼这位仁兄有的地方说的有点问题:任何注解本身都是接口 ,只不过是隐式继承了Annotation这个接口而已
具体可看
然后我们发现: Annotation 是jdk1.5 新增的特性,然而接口定义方法体是jdk1.8才有的特性,而且必须显式定义为default 修饰的普通方法 或者 静态方法。
所以,无论任何注解都是接口,
任何接口在jdk1.8前都不允许存在方法体
举个例子, Spring的autowired注解
我们一路跟下去就会看到这个注解的处理方法
org\springframework\beans\factory\annotation\QualifierAnnotationAutowireCandidateResolver.java
看到泛型<A extends Annotation>也就侧面证明了注解确实是接口;
然后我们再看一下他的调用,也确实是方法的调用方式;
所以,总结一下:
既然我们可以认为接口是一种非常特殊的抽象类,只不过是不允许存在方法体而已(jdk1.8之前)
那么我们为什么不把注解认为一种特殊的接口呢,只不过方法定义之后必须默认返回参数呢
over
是不是说只要是自定义的注解,成员都是带括号的,不是成员变量吗?还是成员方法??
自定义注解annotation的类型使用关键字@interface而不是interface。它继承了java.lang.annotition.Annotition接口,并非申明了一个interface。同理也不是一个普通类。
Annotation类型、方法定义是独特的、受限制的。Annotation类型的方法必须申明为无参数、无异常抛出的。这些方法定义了Annotation的成员:方法名称为了成员名,而方法返回值称为了成员的类型。
全面解析Java注解
126934 学习 · 102 问题
相似问题