记录一下关于实体类反射的一个笔记!
这几天在做一个导入名单的功能,可能感觉做起来没什么难度,但是在实体类赋值的时候感觉代码不是很好看.
修改前代码:
// An highlighted block
switch (fields.get(i).getTfField()) {
case "custField1":callList.setCustField1(columnValue[valueIndex]);
break;
case "custField2":callList.setCustField2(columnValue[valueIndex]);
break;
......
因为我的名单列表有的是固定字段,有的是扩展字段,所以我需要把这些扩展字段进行判断赋值.扩展字段有20个,鬼知道当时写了多少行代码.后来自己通过反射封装了一个方法.
改良后代码:
for (int j = 0; j < notDuplicateFields.size(); j++) {
if (StringUtils.isNotNullOrEmpty(ll.get(i).get(notDuplicateFields.get(j)))
|| fieldsName.equals(notDuplicateFields.get(j))) {
Method setReadOnly = callList.getClass().getMethod("set" + camelName(fieldsName.get(notDuplicateFields.get(j))), String.class);
setReadOnly.invoke(callList, ll.get(i).get(notDuplicateFields.get(j)));
}
}
deDuplication01:
deDuplication01是我写的一个只取扩展字段的方法,ll是存放数据集合地方比如:
{
"taskName": "XXX",
"callList": [{
"A": "a",
"B": "b",
"C": "c"
.....
},{
"A": "a",
"B": "b",
"C": "c"
....
}]
}
比如说属性"A,B,C"是你的必填属性,其他的都是扩展属性,那你就把扩展字段分离出来形成一个集合,然后循环这个集合.notDuplicateFields就是我取出来的集合.
第一次写文章表达的不是很清楚,不理解欢迎请教,觉得还可以改进的欢迎指教.