什么意思呢?先说明一下场景吧!项目中有一个类(Vehicle,其中大概有50多个属性),另外还有若干API,暂且叫做:api100, api200, api300吧。其中api100和api200用于查询Vehicle,分别查询出一部分属性值,两部分拼装在一起才能形成一个完整的Vehicle,即:api100=>Vehicle, api200=>Vehicle,需要将两个不完整的Vehicle组成一个完整的Vehicle传给api300来继续下一个请求。
Spring和Apache beanutil都提供了copyProperty方法,但是都不能满足需求,因为第一个Vehicle对象的值为null的属性会覆盖第二个对象,算了,还是自己来写吧,反正前两个用的也是反射实现的。那就自己用反射吧!
/**
* 用source中的属性值不为null的属性值填充target
* @param source 要复制的对象
* @param target 要复制的对象
*/
public static <T> void mergeProperties(T source, T target){
try {
Field[] fields = source.getClass().getDeclaredFields();
for(Field field : fields){
field.setAccessible(true);
Object value = field.get(source);
if (value != null){
field.set(target, value);
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}