merge两个对象,互补null,以新对象为主,代码如下
public static Object merge(Objectmaster, Object follow){
if(master ==null && follow ==null)
returnnull;
else if(master == null && null != follow)
returnfollow;
else if(null != master && null == follow)
returnmaster;
else{
Object[] objectNone =new Object[]{};
Class<?> c1 =master.getClass();
Field[] fields =c1.getDeclaredFields();
Method[] methods =c1.getDeclaredMethods();
for(Fieldf : fields){
String fName =f.getName();
Object o1 =null;
Object o2 =null;
for(Methodm : methods){
String mName =m.getName();
if(mName.contains("get") &&mName.equalsIgnoreCase("get"+fName)){
try {
o1 = m.invoke(master, objectNone);
o2 = m.invoke(follow, objectNone);
} catch (Exceptione) {
e.printStackTrace();
}
break;
}
}
o1 = getFitObject(o1,o2);
for (Methodm : methods) {
String mName =m.getName();
if (mName.contains("set") &&mName.equalsIgnoreCase("set" +fName)) {
try {
m.invoke(master,new Object[] { o1 });
} catch (Exceptione) {
e.printStackTrace();
}
break;
}
}
}
}
returnmaster;
}
private static Object getFitObject(Object o1, Object o2){
if(null == o1 && null == o2){
return o1;
}else if(null != o1 && null == o2){
return o1;
}else if(null == o1 && null != o2){
return o2;
}else{
String s1 = o1.toString();
String s2 = o2.toString();
if(s1.equals("0"))//过滤那些int long
s1 = "";
if(StringUtils.isBlank(s1) && StringUtils.isBlank(s2)){
return o1;
}else if(StringUtils.isNotBlank(s1) && StringUtils.isBlank(s2)){
return o1;
}else if(StringUtils.isBlank(s1) && StringUtils.isNotBlank(s2)){
return o2;
}else{
return o1;
}
}
}