javaAPI元注解之Inherited

  • 原创
  • |
  • 浏览:362
  • |
  • 更新:
  • |
  • 标签:JAVA 

首先这个注解是javaAPI四个元注解之一,用于修饰注解,位于java.lang.annotation包下。

Inherited是遗传的意思,看到这个东西有点蒙圈。且看源码注释,用我粗糙的英语翻译一下:指明一个注解类型自动遗传(言外之意注解不会自动遗传)。

如果一个Inherited元注解出现在了一个注解A的声明处,用户在这个类的声明上查询此注解类型A,并且这个类的声明中没有要查询的注解类型A,然后就会自动的去查询此类的父类,这个过程一直重复,直到找到为止,或者到达Object类。如果在所有的父类中都找不到这个类型的注解,这个查询就会指明这个类没有此注解。

注意,被这个元注解修饰的注解对非类的元素无效(言外之意,被此元注解修饰的注解的遗传作用只对类有效)。也要注意,这种元注解仅仅使注解遗传自父类们(复数)。

其实一句话,就是,被Inherited修饰的注解,并且此注解用于修饰类,会自动遗传给其子类。

javaAPI元注解之Inherited

工具/原料

  • Inherited
  • annotation

方法/步骤

  1. 1

    先看注解的声明:

    (1)Documented:生成API帮助文档时显示注解。

    (2)Retention:jvm保留。

    (3)Target:此注解是元注解。

    javaAPI元注解之Inherited
  2. 2

    再看一个例子:创建三个注解,两个注解用Inherited声明,一个没有声明。并且三个注解必须要有Retention=RUNTIME,否则jvm不认识,请看:Retention。

    javaAPI元注解之Inherited
    javaAPI元注解之Inherited
    javaAPI元注解之Inherited
  3. 3

    创建测试类和四个有继承关系的类。getAnnotations查找类的注解,并输出获取到的注解个数。

    javaAPI元注解之Inherited
  4. 4

    再来看一下Deprecated注解的声明,并没有声明Inherited。

    javaAPI元注解之Inherited
  5. 4
    相关内容非法爬取自百度经验
  6. 5

    查看输出,Son1类只有一个注解MyInheritedAnnotation2。为什么哪?

    看这个继承的关系,Son1继承了Father1,Father1继承了GrandFather,GrandFather继承了Monkey,Monkey继承了Object。

    Object类没有注解;

    Monkey有一个注解Deprecated,但是Deprecated注解没有声明Inherited,所以没有注解遗传给GrandFather。

    GrandFather有一个注解MyInheritedAnnotation3,但是MyInheritedAnnotation3没有声明Inherited,所以不会遗传,GrandFather也没有从Monkey继承到注解,所以GrandFather没有注解遗传给Father1;

    Father1有一个注解MyInheritedAnnotation2,MyInheritedAnnotation2声明了Inherited,所以会遗传给Son1;Father1没有从GrandFather继承到注解。

    Son1本身没有注解,但是从其父类Father1继承到了MyInheritedAnnotation2,所以其有一个注解MyInheritedAnnotation2。

    注意一点:Son1.class.getAnnotations();获取的是类的注解,方法等其他元素的注解不会包括在内,所以MyInheritedAnnotation1没有输出。

    javaAPI元注解之Inherited
    javaAPI元注解之Inherited
    END
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部
相关标签JAVA