Java使用反射获取set方法,并执行set方法的工具类
/**
* Created by IntelliJ IDEA.
*
* @Author : 心无
* @create 2022/7/28 10:14
* @Version 2.0
* 用于实体类set的简便操作
*/
public class MyClassLoader{
/**
*
* @param tclass class对象
* @return 返回对象
* @throws ClassNotFoundException
*/
public static Class<?> myClassObject(Class<?> tclass) throws ClassNotFoundException {
return Class.forName(tclass.getCanonicalName());
}
/**
* @param tclass class对象
* @param objects 传入值与实体类对齐
* @return
*/
public static Object myObjectField(Class<?> tclass,Object... objects) throws Exception {
//获取class对象
Class<?> aClass = Class.forName(tclass.getCanonicalName());
//实例化对象
Object bean = aClass.newInstance();
//将数据封装到list集合中
List<Object> list = new ArrayList<>(Arrays.asList(objects));
//返回非继承的方法
//获取成员变量
Field[] fields = aClass.getDeclaredFields();
PropertyDescriptor descriptor = null;
for (int i = 0; i < fields.length; i++) {
//遍历所有方法
descriptor = new PropertyDescriptor(fields[i].getName(), aClass);
//得到set方法
Method setMethod = descriptor.getWriteMethod();
//执行set方法
setMethod.invoke(bean, list.get(i));
}
return bean;
}
/**
* @param tclass class对象
* @param list 传入list集合
* @return
*/
public static Object myObjectField(Class<?> tclass,List<Object> list) throws Exception {
//获取class对象
Class<?> aClass = Class.forName(tclass.getCanonicalName());
//实例化对象
Object bean = aClass.newInstance();
//返回非继承的方法
//获取成员变量
Field[] fields = aClass.getDeclaredFields();
PropertyDescriptor descriptor = null;
for (int i = 0; i < fields.length; i++) {
//遍历所有方法
descriptor = new PropertyDescriptor(fields[i].getName(), aClass);
//得到set方法
Method setMethod = descriptor.getWriteMethod();
//执行set方法
setMethod.invoke(bean, list.get(i));
}
return bean;
}
/**
* @param aClass class对象
* @param map 数据map集合
* @return 返回class对象
* @throws Exception
*/
public static Object myObjectMapField(Class<?> aClass, Map<String, Object> map) throws Exception {
Object bean = aClass.newInstance();
Set<Map.Entry<String, Object>> entrySet = map.entrySet();
for (Map.Entry<String, Object> entry : entrySet) {
String key = entry.getKey();
Object value = entry.getValue();
//获取去key相同的set/get方法
PropertyDescriptor descriptor = new PropertyDescriptor(key, bean.getClass());
//获取set方法
Method method = descriptor.getWriteMethod();
//获取形参列表内容
Object value1 = getBeanValue(value, method.getParameterTypes()[0]);
//执行提交
method.invoke(bean, value1);
}
return bean;
}
//通过判断参数类型进行解析
/**
* 判断传入参数类型
* @param value 传入map集合的value
* @param type 传如value的类型并对其进行解析并返回
* @return 返回解析后的内容
*/
private static Object getBeanValue(Object value, Class<?> type) {
if (value != null){
if (type.isAssignableFrom(String.class)){
return value.toString();
}else if (type.isAssignableFrom(Integer.class) || type.isAssignableFrom(int.class)){
return Integer.parseInt(value.toString());
}else if (type.isAssignableFrom(Double.class) || type.isAssignableFrom(double.class)){
return Double.parseDouble(value.toString());
}else if (type.isAssignableFrom(Character.class) || type.isAssignableFrom(char.class)){
return String.valueOf(value);
}else if (type.isAssignableFrom(Float.class) || type.isAssignableFrom(float.class)){
return Float.parseFloat(value.toString());
}else if (type.isAssignableFrom(Boolean.class) || type.isAssignableFrom(boolean.class)){
return Boolean.parseBoolean(value.toString());
}else if (type.isAssignableFrom(Long.class) || type.isAssignableFrom(long.class)){
return Long.parseLong(value.toString());
}else {
return value.toString();
}
}
return null;
}
}