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;
    }
}

辅助类

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : 心无
 * @create 2022/7/29 15:06
 * @Version 1.0
 */
public class BeanClassUtils implements BeanClassLoader{
    @Override
    public Map<String, Object> getMap(Map<String, Object[]> map) {
        Map<String,Object> map1 = new HashMap<>();
        for (Map.Entry<String, Object[]> entry : map.entrySet()) {
            String key = entry.getKey();
            Object[] value = entry.getValue();
            for (Object object : value) {
                map1.put(key, object);
            }
        }
        return map1;
    }
    
}

接口

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : 心无
 * @create 2022/7/29 15:03
 * @Version 1.0
 */
public interface BeanClassLoader {
    Map<String,Object> getMap(Map<String,Object[]> map);
}

使用

注意传入参数应该与实体类成员顺序一一对应!!!!!
//1.可变参数
User user = (User) MyClassLoader.myObjectField(User.class,"此处传入与实体类成员变量从上到下对应的值");
System.out.println(user);
//2.list集合例如
List<Object> list = new ArrayList<>();
        list.add(2);
        list.add("xw");
        list.add("男");
        list.add(12);
        User user = (User) MyClassLoader.myObjectField(User.class, list);
        System.out.println(user);

目的对反射进行练习,并简化set写的步骤内容

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值