@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 的使用详解 Java 元注解 @Inherited 是 Java 语言中的一种元注解,它用于表示某个注解类型是自动继承的。当我们在一个注解类型上添加 @Inherited 注解时,这个注解类型将被自动继承到其子类...
Java 5引入了四个基本的元注解:@Documented、@Target、@Retention和@Inherited,而Java 8又添加了@Repeatable和@Native。 1. **@Documented**: @Documented注解是一个标记注解,不包含任何成员变量。当一个...
Java 元注解包括四大类:@Retention、@Target、@Documented、@Inherited 等。 1.@Retention @Retention 用于指定注解的保留期限,可以设置为 SOURCE、CLASS 或 RUNTIME。 * RetentionPolicy.SOURCE:注解只保留在...
以上就是关于Java注解的基本概念、使用和自定义方法。在实际开发中,注解广泛应用于Spring框架、ORM框架如Hibernate等,极大地简化了代码,提高了可维护性和可扩展性。学习和掌握注解是提升Java编程技能的重要一环。
注意:@Inherited 注解类型是被标注过的类的子类所继承,类并不从它所实现的接口继承注解,方法并不从它所覆写的方法继承注解。 @Repeatable 注解是 Java 中的一种元注解,用于指定注解可以被重复应用。@Repeatable...
在Java编程语言中,注解(Annotation)是一种元数据,它提供了向编译器或JVM提供附加信息的方式。这些信息可以用于代码分析、编译时检查或运行时处理。...因此,学习和掌握Java注解对于提升开发效率至关重要。
Java注解是Java编程语言中的一个重要特性,它们提供了一种元数据的方式,使得开发者可以在代码中添加额外的信息,这些信息可以被编译器或者运行时环境用来执行特定的任务。注解在Java中扮演了多种角色,包括代码的...
Java注解是自JDK1.5版本...通过学习和运行这些示例,你可以更深入地理解Java注解的使用方式和它们在实际项目中的应用。对于初学者,这是一个很好的实践资源,对于有经验的开发者,这些示例也可以作为快速参考和回顾。
### Java注解学习 #### 知识点概览 Java注解是Java 5.0引入的一个重要特性,用于向代码添加元数据,而不影响其实际功能。它们为开发过程中的自动化工具、编译器检查、运行时元数据读取等提供了强大的功能。本文将...
Java注解是Java编程语言中的一个重要特性,它允许程序员在代码中添加元数据,这些元数据可以被编译器、解释器或其他工具在编译时或运行时解析和使用。注解的主要目的是提供一种更安全、更方便的方式来为代码添加信息...
Java预定义了四个元注解:@Retention、@Target、@Documented和@Inherited。 - @Retention:定义注解的生命周期,有SOURCE、CLASS和RUNTIME三个策略。SOURCE表示注解只在源代码中存在,编译后会被丢弃;CLASS表示...
### 一、Java注解概述 1. **定义**: 注解是一种声明式的编程元素,以`@`符号开头,后面跟着注解的名称。它们可以应用于类、接口、方法、变量等不同级别。 2. **预定义注解**: Java标准库提供了若干预定义注解,如`...
Java注解,也被称为元数据,是Java编程语言中的一个重要特性,它允许程序员在源代码中插入信息,这些信息可以被编译器或运行时环境用于处理代码。注解为开发者提供了一种灵活的方式来标记代码,以实现代码的自解释性...
Java注解,也称为 Annotation,是Java编程语言中的一种元数据机制,用于向编译器、JVM(Java虚拟机)或工具提供有关代码的信息。这些信息可以用来进行编译时检查、运行时处理,或者作为配置信息。注解不是程序的一...
本文将深入探讨这两个领域的注解,包括它们的使用方式、原理,以及如何自定义Java注解。 一、Java注解 1. **注解的基本概念**:Java注解是一种元数据,它提供了一种安全的方法来将信息附加到代码中,而不会影响其...
本文将深入探讨如何在Spring框架中利用Java注解进行扩展,以提升代码的可读性和可维护性。 首先,我们需要了解Java注解(Annotation)。注解是Java语言的一种元数据,它提供了在编译时或运行时对代码进行信息附加的...
* 使用`@Inherited`指定注解是否可以被继承,例如:`@Inherited` 自定义注解的使用 ------------------ 自定义注解可以用于各种场景,例如: * 标记某个方法或类,以便于后续处理。 * 提供更多的信息,例如描述...
Java注解(Annotation)是Java语言的一个重要特性,它为代码提供了一种元数据,用于在编译时或运行时进行处理。注解不会直接影响程序的执行,但可以通过注解处理器来实现特定的功能,例如代码生成、验证、性能监控等...
Java Annotation注解技术是自Java SE 5.0版本引入的一种元编程机制,它允许程序员在源代码的各个层面(如类、方法、变量等)添加元数据,以供编译器、JVM或第三方工具在编译时或运行时进行处理。Annotation简化了...
Java注解是Java编程语言中的一个重要特性,它允许程序员在代码中嵌入元数据,这些元数据可以被编译器或运行时环境用来执行各种任务,例如代码验证、简化配置、实现AOP(面向切面编程)等。注解在Java世界中扮演着不...