拼接set,get方法,并利用反射调用,完成两个对象的赋值
在维护的一个项目中,有两个实体,包含大量命名相似的属性。需求里面需要将一个实体的属性值赋值到另外一个实体里面进行保存。由于所要赋值字段名称又不完全一样,所以不能用BeanUtils.copyProperties(); 自己又不想一个一个set进去,最后根据字段的命名规律,然后利用反射解决了问题。
- 实体属性
实体A
实体B
- 要把B的 MP1-MP63 的值赋给A的 MP1-MP63,利用属性命名规律,拼接set,get方法,再利用反射解决,偷懒。。
Class<? extends A> aClass= A.getClass();
Class<? extends B> bClass= B.getClass();
/* 给A MP1~MP32_ 数据赋值 */
String setter; // A set方法
String getter; // B get方法
String value; // set 值
int length = 0; // 测点字段数量
// 是测点字段 数量增加
for (Field declaredField : aClass.getDeclaredFields()) {
if (declaredField.getName().contains("postionGp")) length++;
}
for (int i = 0; i < length; i++) {
// 取值
getter = "getOp60PostionGp" + i;//get方法
value = (String) bClass.getMethod(getter).invoke(B);//B实体对象
// 赋值
setter = "setPostionGp" + i;
Method curMethod60 = aClass.getMethod(setter, String.class); // 获取set方法
curMethod60.invoke(A, value);//A实体对象、value:set的参数值
}
AMapper.insertA(A);