通过反射获取运行时类的完整结构
Field、Method、Constructor、Superclass、Interface、Annotation
- 实现的全部接口
- 所继承的父类
- 全部的构造器
- 全部的方法
- 全部的属性
实现的全部接口
public Class<?>[] getInterfaces()
:确定此对象所表示的类或接口实现的接口。
所继承的父类
public Class<? Super T> getSuperclass()
:返回表示此 Class 所表示的实体(类、接口、基本类型)的父类的 Class。
全部的构造器
public Constructor<?>[] getDeclaredConstructors()
:获取类本身的所有构造方法,包括公有、保护、私有。
public Constructor<?>[] getConstructors()
:获取类本身非私有构造方法。
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) throws NoSuchMethodException
:获取类本身指定的构造方法,parameterTypes 参数类型。
public Constructor<T> getConstructor(Class<?>... parameterTypes) throws NoSuchMethodException
:获取类本身指定的非私有构造方法、parameterTypes 参数类型。
Constructor 类中:
public int getModifiers()
:取得修饰符。public String getName()
:取得方法名称。public Class<?>[] getParameterTypes()
:取得参数的类型。
全部的属性
public native Field[] getDeclaredFields()
: 获取类本身的所有字段,包括公有、保护、私有。
public Field[] getFields()
:获取类本身和其所有父类的公有和保护字段。
public native Field getDeclaredField(String name) throws NoSuchFieldException
: 获取类本身的指定字段,包括公有、保护、私有,namew 为字段名。
public Field getField(String name) throws NoSuchFieldException
:获取类本身和其所有父类指定的公有和保护字段,name 为字段名。
Field 方法中:
public int getModifiers()
:以整数形式返回此 Field 的修饰符。public Class<?> getType()
:得到 Field 的属性类型。public String getName()
:返回 Field 的名称。
示例:
1 | /** |
全部的方法
public Method[] getDeclaredMethods()
:获取类本身的所有方法,包括公有、保护、私有。
public Method[] getMethods()
:获取类本身和其所有父类的公有和保护方法。
public Method getDeclaredMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException
:获取类本身的指定方法,包括公有、保护、私有,name 为方法名、parameterTypes 为参数类型。
public Method getMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException
:获取类本身和其所有父类指定的公有和保护方法,name 为方法名、parameterTypes 为参数类型。。
与 Method 相关的执行方法:
public native Object invoke(Object receiver, Object... args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException
:执行方法。
public native T newInstance(Object... args) throws InstantiationException,IllegalAccessException, IllegalArgumentException, InvocationTargetException
:执行构造方法。
Method 类中:
public Class<?> getReturnType()
:取得全部的返回值。
public Class<?>[] getParameterTypes()
:取得全部的参数。public int getModifiers()
:取得修饰符。public Class<?>[] getExceptionTypes()
:取得异常信息。
示例:
1 | /** |
补充
Annotation 相关
public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
:方法将为指定的类型返回此元素的注释。
示例:
1 | /** |
显示结果:
1 | name: getSampleMethod |
public Annotation[] getDeclaredAnnotations()
:返回直接存在于此元素上的所有注释,此方法将忽略继承的注释。
示例:
1 | /** |
显示结果:
1 | @com.example.reflect.Demo(str=Demo Annotation, val=100) |
注意:上面两示例是和自定义注解一起关联使用,也可以和 AOP 一起使用,具体案例可参考自定义注解。
If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !