问答详情
源自:4-3 关于自定义注解的代码演示说明

自定义注解中的成员变量为什么后面要加括号?

自定义注解中的成员变量为什么后面要加括号?

提问者:会飞的小飞象 2017-12-19 15:51

个回答

  • qq_啊啊啊洪湖水我的泪_0
    2018-02-09 14:20:08

    一楼这位仁兄有的地方说的有点问题:任何注解本身都是接口 ,只不过是隐式继承了Annotation这个接口而已

    具体可看

    http://img2.mukewang.com/5a7d139d00013fcf08730387.jpg


    然后我们发现: Annotation 是jdk1.5 新增的特性,然而接口定义方法体是jdk1.8才有的特性,而且必须显式定义为default 修饰的普通方法 或者 静态方法。

    所以,无论任何注解都是接口,

    任何接口在jdk1.8前都不允许存在方法体

    举个例子, Spring的autowired注解

    http://img4.mukewang.com/5a7d17d10001485d09710248.jpg

    我们一路跟下去就会看到这个注解的处理方法

    org\springframework\beans\factory\annotation\QualifierAnnotationAutowireCandidateResolver.java

    http://img1.mukewang.com/5a7d3c91000113d409560390.jpg

    看到泛型<A extends Annotation>也就侧面证明了注解确实是接口;

    然后我们再看一下他的调用,也确实是方法的调用方式;

    所以,总结一下:

        既然我们可以认为接口是一种非常特殊的抽象类,只不过是不允许存在方法体而已(jdk1.8之前)

        那么我们为什么不把注解认为一种特殊的接口呢,只不过方法定义之后必须默认返回参数呢


        over


  • 会飞的小飞象
    2017-12-21 09:08:15

    是不是说只要是自定义的注解,成员都是带括号的,不是成员变量吗?还是成员方法??


  • lanrong1995
    2017-12-20 16:27:36

    自定义注解annotation的类型使用关键字@interface而不是interface。它继承了java.lang.annotition.Annotition接口,并非申明了一个interface。同理也不是一个普通类。

    Annotation类型、方法定义是独特的、受限制的。Annotation类型的方法必须申明为无参数、无异常抛出的。这些方法定义了Annotation的成员:方法名称为了成员名,而方法返回值称为了成员的类型。