Java 使用反射将map中对应key的值赋值对象中

使用反射 API 中的 Field 类的 set 方法来给对象的指定字段赋值。具体步骤如下:

1. 获取需要操作的字段对应的 Field 对象,可以使用 Class 类的 getField 或 getDeclaredField 方法,前者只能获取 public 的字段,后者可以获取任意字段;

2. 使用 Field 对象的 setAccessible 方法将字段的可访问性设置为 true,以便能够修改私有属性;

3. 使用 Field 对象的 set 方法给字段赋

List<ReportEjQyExportVo> resList = new ArrayList<>();

        List<ReportEjQyVo> list = page.getRecords();
        int index = 0;
        ReportEjQyExportVo exportVo = null;
        for (ReportEjQyVo vo : list) {
            index++;
            exportVo = new ReportEjQyExportVo();
            BeanUtils.copyProperties(vo, exportVo);
            exportVo.setIndex(index);
            Class clazz = exportVo.getClass();
            Field[] fields = clazz.getDeclaredFields();
            Map<String, Map<String,Integer>> map = vo.getDataMap();
                for (Field field : fields) {
                    //os_zkf
                    String fieldName = field.getName();
                    if (fieldName.indexOf("_") > 0) {
                        String name1 = fieldName.substring(0, fieldName.indexOf("_"));
                        String name2 = fieldName.substring(fieldName.indexOf("_") + 1);
                        for (String key : map.keySet()) {
                            if (key.equals(name2)) {
                                Map<String, Integer> map1 = map.get(key);
                                for (String key1 : map1.keySet()) {
                                    if (key1.equals(name1)) {
                                        field.setAccessible(true);
                                        field.set(exportVo, map1.get(key1));
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }

            resList.add(exportVo);
        }

值,需要传入参数分别为需要赋值的对象以及赋的值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值