public class ReflectUtils extends Object
| Modifier and Type | Field and Description |
|---|---|
static String |
GETTER_PREFIX
get方法前缀
|
static String |
SETTER_PREFIX
set方法前缀
|
| Constructor and Description |
|---|
ReflectUtils() |
| Modifier and Type | Method and Description |
|---|---|
static Object |
convert(Object obj,
Class<?> type) |
static RuntimeException |
convertReflectionExceptionToUnchecked(Exception e)
将反射时的checked exception转换为unchecked exception.
|
static Field |
getAccessibleField(Object obj,
String name)
循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.
|
static Method |
getAccessibleMethod(Object obj,
String name,
Class<?>... types)
循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问.
|
static Method |
getAccessibleMethodByName(Object obj,
String name)
循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问.
|
static <T> Class<T> |
getClassGenricType(Class clazz)
通过反射, 获得Class定义中声明的泛型参数的类型, 注意泛型必须定义在父类处
如无法找到, 返回Object.class.
|
static Class |
getClassGenricType(Class clazz,
int index)
通过反射, 获得Class定义中声明的父类的泛型参数的类型.
|
static <T> Constructor<T> |
getConstructor(Class<T> clazz,
Class<?>... parameterTypes)
查找类中的指定参数的构造方法
|
static <T> Constructor<T>[] |
getConstructors(Class<T> beanClass)
获得一个类中所有构造列表
|
static Constructor<?>[] |
getConstructorsDirectly(Class<?> beanClass)
获得一个类中所有字段列表,直接反射获取,无缓存
|
static Field |
getField(Class<?> beanClass,
String name)
查找指定类中的所有字段(包括非public字段),也包括父类和Object类的字段, 字段不存在则返回null
|
static Field[] |
getFields(Class<?> beanClass)
获得一个类中所有字段列表,包括其父类中的字段
|
static Field[] |
getFields(Class<?> beanClass,
boolean withSuperClassFieds)
获得一个类中所有字段列表,直接反射获取,无缓存
|
static String |
getFieldsName(Field field)
获取字段名,如果存在
Alias注解,读取注解的值作为名称 |
static Object[] |
getFieldsValue(Object obj)
获取所有字段的值
|
static Object |
getFieldValue(Object obj,
Field field)
获取字段值
|
static Object |
getFieldValue(Object obj,
String fieldName)
获取字段值
|
static String |
getGetMethodName(String fieldName)
获取字段的get函数
|
static Method |
getMethod(Class<?> clazz,
boolean ignoreCase,
String methodName,
Class<?>... paramTypes)
查找指定方法 如果找不到对应的方法则返回null
|
static Method |
getMethod(Class<?> clazz,
String methodName,
Class<?>... paramTypes)
查找指定方法 如果找不到对应的方法则返回null
|
static Method |
getMethodIgnoreCase(Class<?> clazz,
String methodName,
Class<?>... paramTypes)
忽略大小写查找指定方法,如果找不到对应的方法则返回null
|
static Set<String> |
getMethodNames(Class<?> clazz)
获得指定类中的Public方法名
去重重载的方法
|
static Method |
getMethodOfObj(Object obj,
String methodName,
Object... args)
查找指定对象中的所有方法(包括非public方法),也包括父对象和Object类的方法
|
static Method[] |
getMethods(Class<?> beanClass)
获得一个类中所有方法列表,包括其父类中的方法
|
static Method[] |
getMethods(Class<?> clazz,
Filter<Method> filter)
获得指定类过滤后的Public方法列表
|
static Method[] |
getMethodsDirectly(Class<?> beanClass,
boolean withSuperClassMethods)
获得一个类中所有方法列表,直接反射获取,无缓存
|
static String |
getSetMethodName(String fieldName)
根据字段名获取set方法
|
static Class<?> |
getUserClass(Object instance) |
static boolean |
hasField(Object obj,
String fieldName)
判断某个对象是否拥有某个属性
|
static <T> T |
invoke(Object obj,
Method method,
Object... args)
执行方法
|
static <T> T |
invoke(Object obj,
String methodName,
Object... args)
执行对象中指定方法
|
static Object |
invokeGetter(Object obj,
String name)
调用Getter方法.
|
static Object |
invokeMethod(Method method,
Object target) |
static Object |
invokeMethod(Method method,
Object target,
Object... args) |
static Object |
invokeMethod(Object obj,
String name,
Class<?>[] types,
Object[] args)
直接调用对象方法, 无视private/protected修饰符.
|
static Object |
invokeMethodByName(Object obj,
String name,
Object[] args)
直接调用对象方法, 无视private/protected修饰符,
用于一次性调用的情况,否则应使用getAccessibleMethodByName()函数获得Method后反复调用.
|
static void |
invokeSetter(Object obj,
String name,
Object value)
调用Setter方法, 仅匹配方法名
支持多级,如:对象名.对象名.方法
|
static <T> T |
invokeStatic(Method method,
Object... args)
执行静态方法
|
static <T> T |
invokeWithCheck(Object obj,
Method method,
Object... args)
执行方法
执行前要检查给定参数:
|
static boolean |
isEqualsMethod(Method method)
是否为equals方法
|
static boolean |
isHashCodeMethod(Method method)
是否为hashCode方法
|
static boolean |
isToStringMethod(Method method)
是否为toString方法
|
static void |
makeAccessible(Field field)
改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨
|
static void |
makeAccessible(Method method)
改变private/protected的方法为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨
|
static <T> T |
newInstance(Class<T> clazz,
Object... params)
实例化对象
|
static <T> T |
newInstance(String clazz)
实例化对象
|
static <T> T |
newInstanceIfPossible(Class<T> beanClass)
尝试遍历并调用此类的所有构造方法,直到构造成功并返回
|
static <T extends AccessibleObject> |
setAccessible(T accessibleObject)
设置方法为可访问(私有方法可以被外部调用)
|
static void |
setFieldValue(Object obj,
Field field,
Object value)
设置字段值
|
static void |
setFieldValue(Object obj,
String fieldName,
Object value)
设置字段值
|
public static final String SETTER_PREFIX
public static final String GETTER_PREFIX
public static Object invokeGetter(Object obj, String name)
obj - 对象name - 属性名public static void invokeSetter(Object obj, String name, Object value)
obj - 对象name - 属性名value - 值public static Object invokeMethod(Object obj, String name, Class<?>[] types, Object[] args)
obj - 对象name - 方法名types - 参数类型args - 参数public static Object invokeMethodByName(Object obj, String name, Object[] args)
obj - 对象name - 方法args - 参数public static Field getAccessibleField(Object obj, String name)
如向上转型到Object仍无法找到, 返回null.
obj - 对象name - 列名public static Method getAccessibleMethod(Object obj, String name, Class<?>... types)
用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args)
obj - 对象name - 方法名types - 参数类型public static Method getAccessibleMethodByName(Object obj, String name)
用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args)
obj - 对象name - 方法名public static void makeAccessible(Method method)
method - 方法public static void makeAccessible(Field field)
field - 对象public static <T> Class<T> getClassGenricType(Class clazz)
T - 对象clazz - 对象public static Class getClassGenricType(Class clazz, int index)
clazz - clazz The class to introspectindex - the Index of the generic ddeclaration,start from 0.public static RuntimeException convertReflectionExceptionToUnchecked(Exception e)
e - 异常public static boolean hasField(Object obj, String fieldName)
obj - 对象fieldName - 属性名public static <T> Constructor<T> getConstructor(Class<T> clazz, Class<?>... parameterTypes)
T - 对象类型clazz - 类parameterTypes - 参数类型,只要任何一个参数是指定参数的父类或接口或相等即可public static <T> Constructor<T>[] getConstructors(Class<T> beanClass) throws SecurityException
T - 构造的对象类型beanClass - 类SecurityException - 安全检查异常public static Constructor<?>[] getConstructorsDirectly(Class<?> beanClass) throws SecurityException
beanClass - 类SecurityException - 安全检查异常public static Field getField(Class<?> beanClass, String name) throws SecurityException
beanClass - 被查找字段的类,不能为nullname - 字段名SecurityException - 安全异常public static Field[] getFields(Class<?> beanClass) throws SecurityException
beanClass - 类SecurityException - 安全检查异常public static Field[] getFields(Class<?> beanClass, boolean withSuperClassFieds) throws SecurityException
beanClass - 类withSuperClassFieds - 是否包括父类的字段列表SecurityException - 安全检查异常public static String getFieldsName(Field field)
Alias注解,读取注解的值作为名称field - 字段信息public static Object getFieldValue(Object obj, String fieldName) throws InstrumentException
obj - 对象fieldName - 字段名InstrumentException - 包装IllegalAccessException异常public static Object getFieldValue(Object obj, Field field) throws InstrumentException
obj - 对象field - 字段InstrumentException - 包装IllegalAccessException异常public static Object[] getFieldsValue(Object obj)
obj - bean对象,如果是static字段,此处为类classpublic static void setFieldValue(Object obj, String fieldName, Object value) throws InstrumentException
obj - 对象,static字段则此处传ClassfieldName - 字段名value - 值,值类型必须与字段类型匹配,不会自动转换对象类型InstrumentException - 包装IllegalAccessException异常public static void setFieldValue(Object obj, Field field, Object value) throws InstrumentException
obj - 对象,如果是static字段,此参数为nullfield - 字段value - 值,值类型必须与字段类型匹配,不会自动转换对象类型InstrumentException - UtilException 包装IllegalAccessException异常public static Method getMethodOfObj(Object obj, String methodName, Object... args) throws SecurityException
obj - 被查找的对象,如果为null返回nullmethodName - 方法名,如果为空字符串返回nullargs - 参数SecurityException - 无访问权限抛出异常public static Method getMethodIgnoreCase(Class<?> clazz, String methodName, Class<?>... paramTypes) throws SecurityException
clazz - 类,如果为null返回nullmethodName - 方法名,如果为空字符串返回nullparamTypes - 参数类型,指定参数类型如果是方法的子类也算SecurityException - 无权访问抛出异常public static Method getMethod(Class<?> clazz, String methodName, Class<?>... paramTypes) throws SecurityException
clazz - 类,如果为null返回nullmethodName - 方法名,如果为空字符串返回nullparamTypes - 参数类型,指定参数类型如果是方法的子类也算SecurityException - 无权访问抛出异常public static Method getMethod(Class<?> clazz, boolean ignoreCase, String methodName, Class<?>... paramTypes) throws SecurityException
clazz - 类,如果为null返回nullignoreCase - 是否忽略大小写methodName - 方法名,如果为空字符串返回nullparamTypes - 参数类型,指定参数类型如果是方法的子类也算SecurityException - 无权访问抛出异常public static Set<String> getMethodNames(Class<?> clazz) throws SecurityException
clazz - 类SecurityException - 安全异常public static Method[] getMethods(Class<?> clazz, Filter<Method> filter) throws SecurityException
clazz - 查找方法的类filter - 过滤器SecurityException - 安全异常public static Method[] getMethods(Class<?> beanClass) throws SecurityException
beanClass - 类SecurityException - 安全检查异常public static Method[] getMethodsDirectly(Class<?> beanClass, boolean withSuperClassMethods) throws SecurityException
beanClass - 类withSuperClassMethods - 是否包括父类的方法列表SecurityException - 安全检查异常public static boolean isEqualsMethod(Method method)
method - 方法public static boolean isHashCodeMethod(Method method)
method - 方法public static boolean isToStringMethod(Method method)
method - 方法public static <T> T newInstance(String clazz) throws InstrumentException
T - 对象类型clazz - 类名InstrumentException - 包装各类异常public static <T> T newInstance(Class<T> clazz, Object... params) throws InstrumentException
T - 对象类型clazz - 类params - 构造函数参数InstrumentException - 包装各类异常public static <T> T newInstanceIfPossible(Class<T> beanClass)
T - 对象类型beanClass - 被构造的类public static <T> T invokeStatic(Method method, Object... args) throws InstrumentException
T - 对象类型method - 方法(对象方法或static方法都可)args - 参数对象InstrumentException - 多种异常包装public static <T> T invokeWithCheck(Object obj, Method method, Object... args) throws InstrumentException
1. 参数个数是否与方法参数个数一致 2. 如果某个参数为null但是方法这个位置的参数为原始类型,则赋予原始类型默认值
T - 返回对象类型obj - 对象,如果执行静态方法,此值为nullmethod - 方法(对象方法或static方法都可)args - 参数对象InstrumentException - 一些列异常的包装public static <T> T invoke(Object obj, Method method, Object... args) throws InstrumentException
T - 返回对象类型obj - 对象,如果执行静态方法,此值为nullmethod - 方法(对象方法或static方法都可)args - 参数对象InstrumentException - 一些列异常的包装public static <T> T invoke(Object obj, String methodName, Object... args) throws InstrumentException
T - 返回对象类型obj - 方法所在对象methodName - 方法名args - 参数列表InstrumentException - IllegalAccessException包装public static String getGetMethodName(String fieldName)
fieldName - fieldNamepublic static String getSetMethodName(String fieldName)
fieldName - 字段名public static <T extends AccessibleObject> T setAccessible(T accessibleObject)
T - AccessibleObject的子类,比如Class、Method、Field等accessibleObject - 可设置访问权限的对象,比如Class、Method、Field等Copyright © 2020. All rights reserved.