`

有关Annotation的继承

阅读更多

有关Annotation的继承说明:

1、JDK文档中的说明是:只有在类上应用的Annotation才能被继承,而实际应用时的结果是:除了类上应用的Annotation能被继承外,没有被重写的方法的Annotation也能被继承。

2、要注意的是:当方法被重写后,Annotation将不会被继承

3、要使得Annotation 被继承,需要在Annotation中加标识@Inherited,并且如果要被反射应用的话,就需要还有个@Retention(RetentionPolicy.RUNTIME) 标识

4、Annotation的继承不能应用在接口上

代码一、实现类上的继承

java 代码
  1. package com.test;   
  2.   
  3. import java.lang.annotation.Inherited;   
  4. import java.lang.annotation.Retention;   
  5. import java.lang.annotation.RetentionPolicy;   
  6.   
  7. @Inherited  
  8. @Retention(RetentionPolicy.RUNTIME)   
  9. public @interface InheritedTest {   
  10.     String hello();   
  11. }   

 

java 代码
  1. package com.test;   
  2.   
  3. @InheritedTest(hello = "yahaitt")   
  4. public class InheritedParent {   
  5.   
  6. }   

 

java 代码
  1. package com.test;   
  2.   
  3. public class InheritedChild extends InheritedParent {   
  4.   
  5. }   

 

java 代码
  1. package com.test;   
  2.   
  3. public class InheritedClassTest {   
  4.   
  5.     public static void main(String[] args) throws Exception   
  6.     {   
  7.         Class c = InheritedChild.class;   
  8.         if(c.isAnnotationPresent(InheritedTest.class))   
  9.         {   
  10.             InheritedTest it = c.getAnnotation(InheritedTest.class);   
  11.             System.out.println(it.hello());//yahaitt   
  12.         }   
  13.     }   
  14. }   

 

代码二、实现方法上的继承

java 代码
  1. package com.test;   
  2.   
  3. import java.lang.annotation.Inherited;   
  4. import java.lang.annotation.Retention;   
  5. import java.lang.annotation.RetentionPolicy;   
  6.   
  7. @Inherited  
  8. @Retention(RetentionPolicy.RUNTIME)   
  9. public @interface InheritedTest {   
  10.     String hello();   
  11. }   

 

java 代码
  1. package com.test;   
  2.   
  3.   
  4. public class InheritedParent {   
  5.   
  6.     @InheritedTest(hello = "yahaitt")   
  7.     public void doSomething()   
  8.     {   
  9.         System.out.println("parent do something");   
  10.     }   
  11.        
  12. }   

 

java 代码
  1. package com.test;   
  2.   
  3. public class InheritedChild extends InheritedParent {   
  4.        
  5.        
  6. }   

 

java 代码
  1. package com.test;   
  2.   
  3. import java.lang.reflect.Method;   
  4.   
  5. public class InheritedClassTest {   
  6.   
  7.     public static void main(String[] args) throws Exception   
  8.     {   
  9.         Class c = InheritedChild.class;   
  10.         Method method = c.getMethod("doSomething"new Class[]{});   
  11.         if(method.isAnnotationPresent(InheritedTest.class))   
  12.         {   
  13.             InheritedTest it = method.getAnnotation(InheritedTest.class);   
  14.             System.out.println(it.hello());//yahaitt   
  15.         }   
  16.     }   
  17. }
分享到:
评论

相关推荐

    Hibernate继承映射(annotation)

    NULL 博文链接:https://cdxs2.iteye.com/blog/1934884

    annotationProcessor实例demo

    annotationProcessor 继承 自动创建类,获取注解对象,持续更新中

    hibernate annotation 中文文档

    2.2.4. 映射继承关系 2.2.4.1. 每个类一张表 2.2.4.2. 每个类层次结构一张表 2.2.4.3. 连接的子类 2.2.4.4. 从父类继承的属性 2.2.5. 映射实体Bean的关联关系 2.2.5.1. 一对一(One-to-one) 2.2.5.2. 多对一(Many-to-...

    Annotation--学习:限定使用、文档、继承

    NULL 博文链接:https://lansky07.iteye.com/blog/299893

    java8源码-Annotation_demo:Annotation_demo

    java8 源码 Java注解 简介 由于无论在Java后台或者Android开发中我们经常遇到注解这个...通过@Target进行添加到注解中,说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Ann

    精通Java Web整合开发(第2版)

    第12章 基于annotation注解技术的ssh 2整合开发 ...12.4.11 继承关系映射的annotation注解实现549 12.4.12 hibernate集合映射的annotation注解实现552 12.5 基于annotation的ssh 2整合开发554 12.6 小结563

    hibernate annotation帮助文档

    2.2.4. 映射继承关系 2.2.4.1. 每个类一张表 2.2.4.2. 每个类层次结构一张表 2.2.4.3. 连接的子类 2.2.4.4. 从父类继承的属性 2.2.5. 映射实体Bean的关联关系 2.2.5.1. 一对一(One-to-one) 2.2.5.2. 多对一...

    Hibernate4_Inheritance_Annotation:该程序演示了如何使用 Annotations 在 Hibernate 中使用继承

    Hibernate4_Inheritance_Annotation 该程序演示了如何使用 Annotations 在 Hibernate 中使用继承。 Hibernate 支持 3 种类型的继承 每个具体类一个表 - 每个子类都有一个表,该表也具有超类的所有属性。 (TABLE_PER...

    springMVC4-rest-jackson-jsonview-annotation.zip

    一个视图定义可以继承其他视图定义。我们的POJO使用@JsonView注解属性传递已经定义的视图。在Spring的Controller我们可以使用Jackson的@JsonView注解我们的方法。序列化Http响应体的时候,JSON响应将在配置视图的...

    JPA视频教程_使用jpa映射关联和继承

    JPA视频教程_使用jpa映射关联和继承

    spring aop 实现源代码--xml and annotation(带lib包)

    其中BeforeAdvice继承自Adivce接口,这两者都是标签接口,并没有定义任何具体的方法。before方法会在目标对象的指定方法执行之前被执行,在before方法种,你可以取得指定方法的Method实例、参数列表和目标对象,在...

    完美世界大数据笔试.pdf

    ⾸先说⼀下体验,与其说是⼤数据笔试不如说是java笔试,全是java基础的内容,就是⼋股⽂的那些东西,体验感极差,任何跟数据 相关的⼏乎没有在题⽬中体现出来。 2. JVM运⾏时的各部分的状态 1. 设计模式,还要通过...

    Java注解之Retention、Documented、Inherited介绍

    主要介绍了Java注解之Retention、Documented、Inherited注解介绍,本文内容和相关文章是系列文章,需要的朋友可以参考下

    java7源码-AptDemo:演示版

    每一个注解处理器都必须继承自AbstractProcessor public class TestProcessor extends AbstractProcessor { @Override public synchronized void init(ProcessingEnvironment processingEnvironment) { super.init...

    JAVA自学之路 七路线图明细

    一:J2SE 面向对象-封装、继承、多态 内存的分析 递归 集合类、泛型、自动打包与解包、Annotation

    Kotlin 语言参考文档 中文版

    相关书籍 入门 基本语法 惯用法 编码规约 基础 基本类型 包 控制流 返回与跳转 类与对象 类与继承 属性(Property)与域(Field) 接口 可见度修饰符 扩展 数据类 泛型 泛型函数 泛型约束(Generic constraint) 嵌套类...

    JDK1.6学习笔记 林信良

    Java学习笔记 台湾 林信良 什么是Java 从autoboxing、unboxing认识对象 语法入门 Annotation 文本编辑器 Java SE6新功能简介 继承、多型

    j2ee学习路径 对初学者很有帮助

    面向对象-封装、继承、多态 内存的分析 递归 集合类、泛型、自动打包与解包、Annotation IO 多线程、线程同步 TCP/UDP AWT、事件模型、匿名类 正则表达式 反射机制 2:数据库(Oracle或者MySQL) SQL语句 多表...

Global site tag (gtag.js) - Google Analytics