工具类---Map转换成指定对象 对象转换成Map (利用反射去做)

这篇博客分享了如何使用反射技术将Map转换为指定的对象,以及将对象转换为Map的方法。通过示例代码详细展示了转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接上代码了把

这是Map转换为对象

/**
 * Map中的数据 ===> 对象中
 * @author Chenaniah Cheng
 * @create 2019-05-12
 */
public class MapToObjectUtil {

    //第二步:在执行之前 我们约定一下,map中的所有k-v都与对象中的字段名称一致 没有对象中不存在的字段
    public Object changeToObject(Map<String,Object> map, Object obj) throws IllegalAccessException {
        //第一步,通过反射放入值
        Class clazz=obj.getClass();

        Field[] fields = clazz.getDeclaredFields();

        //第二步:
        for(Field filed : fields){
            //允许外界访问
            filed.setAccessible(true);
            //1.map中没有对应该字段的值
            //2.Map中的值是Object类型的,会不会遇到存放值不匹配的,报异常的情况
            if(map.get(filed.getName())!=null && filed.getType()!= BigDecimal.class){
                filed.set(obj,map.get(filed.getName()));
            }
            //3.存放BigDecimal的时候报错
            //4.扩展问题,如果遇到还有其他属性不能放入进去,那么继续 && ?
            if(filed.getType()== BigDecimal.class){
                String val =map.get(filed.getName()).toString();
                BigDecimal bigDecimal = new BigDecimal(val);
                filed.set(obj,bigDecimal);
            }

        }
        return obj;
    }

这是对象转换为Map

/**
 * 该工具类是 对象不为空的字段  ===> Map
 * @author Chenaniah Cheng
 * @create 2019-05-12
 */
public class ObjectToMapUtil {

    //该方法就是把对象传进来 转换为Map再返回回去
    public Map<String,Object> changeToMap(Object obj, Map<String,Object> map){
        Class clazz=obj.getClass();
        //获取所有的字段
        Field[] fields = clazz.getDeclaredFields();
        for(Field filed : fields){
            System.out.println("字段名称:"+filed.getName());
            try {
                filed.setAccessible(true);
                Object val=filed.get(obj);
                if(val != null){
                    map.put(String.valueOf(filed.getName()),val);
                }

            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }

        }

        return map;
    }


}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值