在开发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();
}