目录
ReflectionData
概念理解
ReflectionData 通常指的是在编程中,尤其是在使用反射(Reflection)时,关于类、对象、方法和字段的元数据信息。在 Java 中,反射机制允许程序在运行时获取这些数据,并对其进行操作。其中就包括如下信息:
1. 声明的字段(Declared Fields)
在 Java 反射中,"声明的字段" 指的是在类中定义的所有字段,无论它们的访问修饰符如何(private、protected、默认(包访问)或 public)。通过 Class.getDeclaredFields() 方法可以获取类中声明的所有字段,包括私有字段,但不包括继承自父类的字段。
2. 公共字段(Public Fields)
"公共字段" 特指那些用 public 修饰符声明的字段。这些字段可以被类的任何客户端代码访问。使用 Class.getFields() 方法可以获取类及其父类中所有的公共字段。
3. 声明的方法(Declared Methods)
与声明的字段类似,"声明的方法" 指的是类中定义的所有方法,不论其访问权限如何。Class.getDeclaredMethods() 方法用于获取一个类中声明的所有方法,包括私有、保护、默认(包访问)或公共方法,但不包括继承自父类的方法。
4. 公共方法(Public Methods)
"公共方法" 是指用 public 修饰符声明的方法,可以被任何外部类调用。Class.getMethods() 方法会返回类本身以及从父类或接口继承的所有公共方法。
5. 声明的构造器(Declared Constructors)
"声明的构造器" 指的是类中定义的所有构造器,包括私有、保护、默认(包访问)和公共构造器。通过 Class.getDeclaredConstructors() 方法可以访问这些构造器。
6. 公共构造器(Public Constructors)
"公共构造器" 指的是用 public 修饰符声明的构造器,任何外部类都可以用它来创建对象实例。Class.getConstructors() 方法用于获取类中的所有公共构造器。
7. 声明的公共方法(Declared Public Methods)
"声明的公共方法"指的是在类中明确声明的公共方法,不包括从超类继承的公共方法。这些方法可以通过Class类的getDeclaredMethods方法获取,并通过访问修饰符Modifier.isPublic()判断是否为公共方法。
AnnotationData
是一个静态内部类,用于缓存类的注解信息。这个类的实例包含了类的各种注解信息,如类上的注解、声明的注解等。这个类的实例是通过SoftReference引用的,这意味着在内存不足时,这些缓存的注解数据可以被垃圾收集器回收。
包含annotations 和declaredAnnotations这两个字段都是用来存储注解信息的,但它们的含义和用途有所不同。
annotations:这个字段存储的是类上的所有注解,包括从超类继承的注解。
declaredAnnotations:这个字段存储的是类声明的所有注解,不包括从超类继承的注解。
这两者的主要区别在于,annotations包含了从超类继承的注解,而declaredAnnotations只包含类自己声明的注解。