使用反射 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);
}
值,需要传入参数分别为需要赋值的对象以及赋的值。