import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 泛型工具类
* 通过类的反射实例化对象-面向接口编程
* @since 2018-12-11
*/
public class ReflexUtils {
/**
* 构造函数
* java.lang.Error
*/
private ReflexUtils() {
throw new Error("不能实例化该类!");
}
//通过反射获取实例对象
public static <S> S reflexObject(Class clas, S obj) throws Exception {
//转义指定类型class对象
Class<S> classObject = clas;
//反射获取实例对象
S s = classObject.getDeclaredConstructor().newInstance();
return s;
}
/**
* 通过反射获取实例对象的指定方法对象
* 调用方通过invoke方法使用,如果方法有返回值,就返回值,没有返回值,比如void就返回null
* Object invoke = ctd.invoke(实例对象obj,方法参数等);
*/
public static <S> Method reflexMethod(Class clas, String methodName,S obj) throws Exception{
//转义指定类型class对象
Class<S> classObject = clas;
Method resultMethod = classObject.getDeclaredMethod(methodName);
return resultMethod;
}
//通过反射修改实例对象的私有属性值
public static <S> void reflexProperty(Class clas, String field, Object fieldValue, S obj) throws Exception{
Class<S> classObject = clas;
//获取字段对象
Field fieldObj = classObject.getDeclaredField(field);
//设置私有属性可以修改
fieldObj.setAccessible(true);
//修改私有属性值
fieldObj.set(obj,fieldValue);
}
}
java 反射 | 工具类
最新推荐文章于 2024-10-03 08:24:38 发布
437

被折叠的 条评论
为什么被折叠?



