Java使用反射获取set方法,并执行set方法的工具类

时间:2025-03-10 18:41:22
/** * 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; } }