@Inherited:允许子类继承父类的注解。
二.代码
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Inherited public @interface DBTable { public String name() default ""; } @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface DBTable2 { public String name() default ""; } package com.jyz.study.jdk.reflect; import java.util.Arrays; import com.jyz.study.jdk.annotation.DBTable; import com.jyz.study.jdk.annotation.DBTable2; /** * 1.演示从Class对象上获得反射元素Field Method Constructor * 2.演示AnnotatedElement接口的四个方法 * @author JoyoungZhang@gmail.com * */ public class DeclaredOrNot { public static void main(String[] args) { Class<Sub> clazz = Sub.class; System.out.println("============================Field==========================="); //public + 继承 System.out.println(Arrays.toString(clazz.getFields())); //all + 自身 System.out.println(Arrays.toString(clazz.getDeclaredFields())); System.out.println("============================Method==========================="); //public + 继承 System.out.println(Arrays.toString(clazz.getMethods())); //all + 自身 System.out.println(Arrays.toString(clazz.getDeclaredMethods())); System.out.println("============================Constructor==========================="); //public + 自身 System.out.println(Arrays.toString(clazz.getConstructors())); //all + 自身 System.out.println(Arrays.toString(clazz.getDeclaredConstructors())); System.out.println("============================AnnotatedElement==========================="); //注解DBTable2是否存在于元素上 System.out.println(clazz.isAnnotationPresent(DBTable2.class)); //如果存在该元素的指定类型的注释DBTable2,则返回这些注释,否则返回 null。 System.out.println(clazz.getAnnotation(DBTable2.class)); //继承 System.out.println(Arrays.toString(clazz.getAnnotations())); //自身 System.out.println(Arrays.toString(clazz.getDeclaredAnnotations())); } } @DBTable class Super{ private int superPrivateF; public int superPublicF; public Super(){ } private int superPrivateM(){ return 0; } public int superPubliceM(){ return 0; } } @DBTable2 class Sub extends Super{ private int subPrivateF; public int subPublicF; private Sub(){ } public Sub(int i){ } private int subPrivateM(){ return 0; } public int subPubliceM(){ return 0; } } console output: ============================Field=========================== [public int com.jyz.study.jdk.reflect.Sub.subPublicF, public int com.jyz.study.jdk.reflect.Super.superPublicF] [private int com.jyz.study.jdk.reflect.Sub.subPrivateF, public int com.jyz.study.jdk.reflect.Sub.subPublicF] ============================Method=========================== [public int com.jyz.study.jdk.reflect.Sub.subPubliceM(), public int com.jyz.study.jdk.reflect.Super.superPubliceM(), public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException, public final void java.lang.Object.wait() throws java.lang.InterruptedException, public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException, public boolean java.lang.Object.equals(java.lang.Object), public java.lang.String java.lang.Object.toString(), public native int java.lang.Object.hashCode(), public final native java.lang.Class java.lang.Object.getClass(), public final native void java.lang.Object.notify(), public final native void java.lang.Object.notifyAll()] [private int com.jyz.study.jdk.reflect.Sub.subPrivateM(), public int com.jyz.study.jdk.reflect.Sub.subPubliceM()] ============================Constructor=========================== [public com.jyz.study.jdk.reflect.Sub(int)] [private com.jyz.study.jdk.reflect.Sub(), public com.jyz.study.jdk.reflect.Sub(int)] ============================AnnotatedElement=========================== true @com.jyz.study.jdk.annotation.DBTable2(name=) [@com.jyz.study.jdk.annotation.DBTable(name=), @com.jyz.study.jdk.annotation.DBTable2(name=)] [@com.jyz.study.jdk.annotation.DBTable2(name=)]
三.代码说明
- 代码演示了从Class对象上获得反射元素Field Method Constructor时get*和getDeclared*的区别。
- 代码演示了AnnotatedElement接口的四个方法。
- java.lang.reflect.AnnotatedElement表示可以被注解的元素。它只有四个方法,参考代码DeclaredOrNot.java。
- 当我使用clazz.getAnnotations()时,我期望得到控制台打印出来的内容,但实际上却只得到了[@com.jyz.study.jdk.annotation.DBTable2(name=)],后来发现是DBTable里没有声明@Inherited。
相关推荐
主要介绍了java元注解@Inherited的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Java5.0定义的元注解: 1.@Target, 2.@Retention, 3.@Documented, 4.@Inherited 这些类型和它们所⽀持的类在java.lang.annotation包中可以找到。下⾯我们看⼀下每个元注解的作⽤和相应分参数的使⽤说明。 ...
注解的目标,使用ElementType枚举,目标可以有多个,用{}表示@Retention :注解保留到什么时候,使用RetentionPolicy ,更改RetentionPolicy.CLASS @Documented :表示注解信息包含到生成的文档中@Inherited :...
帮助大家复习java基础知识其中有 hashCode 2 toString 2 finalize 2 用已学知识做出简单的房屋出租系统 3 类方法使用注意事项和细节讨论 4 ...@Inherited 注解 20 异常-Exception 21 编译异常 22 异常处理 2
主要介绍了Java注解之Retention、Documented、Inherited注解介绍,本文内容和相关文章是系列文章,需要的朋友可以参考下
2020假期spring学习 1.注解和反射 1.注解 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 Java 语言中的类、方法、变量、参数和包等都可以被标注。 内置的注解 作用在代码的注解是 @...
四 Java 预置的注解 4.1 @Deprecated 4.2 @Override 4.3 @SuppressWarnings 4.4 @SafeVarargs 4.5 @FunctionalInterface 五 注解的属性 5.1 属性的定义 5.2 注解的提取 六 注解的使用场景 七 注解实战之简易测试...
近期接触了路由和模块间通信的内容,发现Java注解非常常用。 避免后面看各源码被其阻塞,大致了解了下,作此文记录之。 注解类型 @Target @Retention @Documented @Inherited @Target 用于描述注解的使用范围,可能...
Java注解 简介 由于无论在Java后台或者Android开发中我们经常遇到注解这个功能机制,例如常用的框架Java后台开发中,Spring、MyBatis等,Android的Dagger2,butterknife等,都是注解框架。今天我们就了解java是如何...
元注解(JDK的元Annotation)4.1.@Target4.2.@Retention4.3.@Documented4.4.@Inherited4.5.@Result四、在程序中使用(解析)注解五、案例——简单的测试框架 一、注解是什么? 从JDK5开始,Java增加对元数据的支持...
带有Inherited注解的service文件,包含java源文件和编译后的class文件,可用于dubbo+zookeeper平台的事务处理,下载后直接将原来的server.class文件替换即可
5.4.4 Java中对象的创建和使用127 5.5 属性130 5.5.1 属性的定义130 5.5.2 变量131 5.6 方法132 5.6.1 方法的定义132 5.6.2 构造方法135 5.6.4 方法重载138 5.6.5 自定义方法138 5.6.6 系统提供方法139 5.6.7 方法...
首先什么是注解,它的作用是什么,本文讲解了Android注解的最基本内容与实例解读
25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................
@Inherited @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) public @interface CacheNameRemove { String name(); String[] keys() default {}; } //根据key...