Java合併一個物件的非空屬性到另外一個物件的空屬性
阿新 • • 發佈:2020-12-25
技術標籤:Java基礎
在開發CRM系統中,遇到合併客戶的需求,就是將兩個客戶進行合併,將源客戶合併到目標客戶中,主要是利用java反射來實現。
public static void copy(Object target, Object source) throws Exception {
Field[] field = target.getClass().getDeclaredFields();
Method[] mm = target.getClass().getDeclaredMethods();
for (int j = 0; j < field.length; j++) {
String name = field[j].getName();
String type = field[j].getGenericType().toString();
if (type.equals("class java.lang.String")) {
Method m = target.getClass().getMethod("get" + toUpperCaseFirstOne(name));
String targetValue = (String) m.invoke(target);
String sourceValue = (String) m.invoke(source);
if (StrUtil.isEmptyOrUndefined(targetValue) && !StrUtil.isEmptyOrUndefined(sourceValue)) {
m = target.getClass().getMethod("set" + toUpperCaseFirstOne(name) , String.class);
m.invoke(target, sourceValue);
}
} else if ("int".equals(type)) {
Method m = target.getClass().getMethod("get" + toUpperCaseFirstOne(name));
Integer value = (Integer) m.invoke(target);
Integer value2 = (Integer) m.invoke(source);
if (value == null) {
m = target.getClass().getMethod("set" + toUpperCaseFirstOne(name), Integer.class);
m.invoke(target, value2);
}
}
}
}
private static String toLowerCaseFirstOne(String s) {
if (Character.isLowerCase(s.charAt(0)))
return s;
else
return (new StringBuilder()).append(Character.toLowerCase(s.charAt(0))).append(s.substring(1)).toString();
}
private static String toUpperCaseFirstOne(String s) {
if (Character.isUpperCase(s.charAt(0)))
return s;
else
return (new StringBuilder()).append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).toString();
}