-
public class ReflectionUtilsCreated by yuhaiyang on 2019-09-02.
-
-
Field Summary
Fields Modifier and Type Field Description public final static ReflectionUtilsINSTANCE
-
Method Summary
Modifier and Type Method Description final Array<Class<?>>getClassTypes(Array<Object> args)first of all, int.class != Integer.class. final ObjectnewInstance(String className, Array<Object> args, Array<Class<?>> argClasses)根据类名和构造函数的参数新建一个对象实例,只能通过 public 的构造函数新建实例。 final ObjectgetStaticField(String className, String fieldName)获得类的静态属性值,不管是 public 或者 private 的都可以。 final BooleansetStaticField(String className, String fieldName, Object value)修改类的静态属性值,不管是 public 或者 private 的都可以。 final ObjectgetField(Object owner, String fieldName)获得对象的属性值,不管是 public 或者 private 的都可以, 但是该方法只能获得在该对象的类中所定义的成员变量的值,不能获得其父类的成员变量的值。 final ObjectgetField(Object owner, String className, String fieldName)获得对象的属性值(属性是对象的父类中定义的),不管是 public 或者 private 的都可以。 final BooleansetField(Object owner, String fieldName, Object value)修改对象的属性值,不管是 public 或者 private 的都可以, 但是该方法只能修改在该对象的类中所定义的成员变量的值,不能修改其父类的成员变量的值。 final BooleansetField(Object owner, String className, String fieldName, Object value)修改对象的属性值(属性是对象的父类中定义的),不管是 public 或者 private 的都可以。 final ObjectinvokeStaticMethod(String className, String methodName, Array<Object> args, Array<Class<?>> argClasses)调用类的静态方法,不管是 public 或者 private 的都可以。 final ObjectinvokeMethod(Object owner, String methodName, Array<Object> args, Array<Class<?>> argClasses)调用对象的方法,不管是 public 或者 private 的都可以。 但是该方法只能调用对象所属类中定义的方法,不能调用其父类中定义的方法。 final ObjectinvokeMethod(Object owner, String methodName, Object args, Class<?> argClasses, Boolean showLog)调用对象的方法,不管是 public 或者 private 的都可以。 但是该方法只能调用对象所属类中定义的方法,不能调用其父类中定义的方法。 final ObjectinvokeMethod(Object owner, String className, String methodName, Array<Object> args, Array<Class<?>> argClasses)调用对象的方法(方法是在对象所属类的父类中定义的),不管是 public 或者 private 的都可以。 如果这个方法在子类中重写的话,实际上还是调用子类的重写方法 final ObjectnewArrayInstance(String className, Integer len)新建一个类型的数组 final ObjectgetObjectInArray(Object array, Integer index)获得数组中的一个元素 final UnitsetObjectInArray(Object array, Integer index, Object value)修改数组中的一个元素的值 -
-
Method Detail
-
getClassTypes
final Array<Class<?>> getClassTypes(Array<Object> args)
first of all, int.class != Integer.class. but int.class == Integer.TYPE the is similarly to other primitive type, such as float, boolean, double, byte, char, short, long.
int a = 12; Object[] args = new Object[]{a};
in last code block, args0.class is Integer.class because JVM cast a to Integer type in Java. in that case, this getClassTypes method will return wrong so if args contains primitive type(like int, boolean) you should not use this method.
- Parameters:
args- 参数
-
newInstance
final Object newInstance(String className, Array<Object> args, Array<Class<?>> argClasses)
根据类名和构造函数的参数新建一个对象实例,只能通过 public 的构造函数新建实例。
- Parameters:
className- 类名args- 构造函数的参数argClasses- 构造函数的参数的 class type
-
getStaticField
final Object getStaticField(String className, String fieldName)
获得类的静态属性值,不管是 public 或者 private 的都可以。
- Parameters:
className- 类名fieldName- 属性名
-
setStaticField
final Boolean setStaticField(String className, String fieldName, Object value)
修改类的静态属性值,不管是 public 或者 private 的都可以。
- Parameters:
className- 类名fieldName- 属性名value- 修改后的属性值
-
getField
final Object getField(Object owner, String fieldName)
获得对象的属性值,不管是 public 或者 private 的都可以, 但是该方法只能获得在该对象的类中所定义的成员变量的值,不能获得其父类的成员变量的值。
- Parameters:
owner- 对象fieldName- 对象所属类的属性名
-
getField
final Object getField(Object owner, String className, String fieldName)
获得对象的属性值(属性是对象的父类中定义的),不管是 public 或者 private 的都可以。
- Parameters:
owner- 对象className- 对象所属类的父类的类名fieldName- 对象所属类的父类的属性名
-
setField
final Boolean setField(Object owner, String fieldName, Object value)
修改对象的属性值,不管是 public 或者 private 的都可以, 但是该方法只能修改在该对象的类中所定义的成员变量的值,不能修改其父类的成员变量的值。
- Parameters:
owner- 对象fieldName- 对象所属类的属性名value- 修改后的属性值
-
setField
final Boolean setField(Object owner, String className, String fieldName, Object value)
修改对象的属性值(属性是对象的父类中定义的),不管是 public 或者 private 的都可以。
- Parameters:
owner- 对象className- 对象所属类的父类的类名fieldName- 对象所属类的父类的属性名value- 修改后的属性值
-
invokeStaticMethod
final Object invokeStaticMethod(String className, String methodName, Array<Object> args, Array<Class<?>> argClasses)
调用类的静态方法,不管是 public 或者 private 的都可以。
- Parameters:
className- 类名methodName- 静态方法名args- 方法的参数argClasses- 方法的参数的 class type
-
invokeMethod
final Object invokeMethod(Object owner, String methodName, Array<Object> args, Array<Class<?>> argClasses)
调用对象的方法,不管是 public 或者 private 的都可以。 但是该方法只能调用对象所属类中定义的方法,不能调用其父类中定义的方法。
- Parameters:
owner- 对象methodName- 对象所属类的方法名args- 方法的参数argClasses- 方法的参数的 class type
-
invokeMethod
final Object invokeMethod(Object owner, String methodName, Object args, Class<?> argClasses, Boolean showLog)
调用对象的方法,不管是 public 或者 private 的都可以。 但是该方法只能调用对象所属类中定义的方法,不能调用其父类中定义的方法。
- Parameters:
owner- 对象methodName- 对象所属类的方法名args- 方法的参数argClasses- 方法的参数的 class type
-
invokeMethod
final Object invokeMethod(Object owner, String className, String methodName, Array<Object> args, Array<Class<?>> argClasses)
调用对象的方法(方法是在对象所属类的父类中定义的),不管是 public 或者 private 的都可以。 如果这个方法在子类中重写的话,实际上还是调用子类的重写方法
- Parameters:
owner- 对象className- 对象所属类的父类的类名methodName- 对象所属类的父类的方法名args- 方法参数argClasses- 方法的参数的 class type
-
newArrayInstance
final Object newArrayInstance(String className, Integer len)
新建一个类型的数组
- Parameters:
className- 数组的类型的类名len- 数组的大小
-
getObjectInArray
final Object getObjectInArray(Object array, Integer index)
获得数组中的一个元素
- Parameters:
array- 数组index- 元素在数组中的位置
-
setObjectInArray
final Unit setObjectInArray(Object array, Integer index, Object value)
修改数组中的一个元素的值
- Parameters:
array- 数组index- 元素在数组中的位置value- 修改后的元素值
-
-
-
-