1. 程式人生 > 其它 >Java合併一個物件的非空屬性到另外一個物件的空屬性

Java合併一個物件的非空屬性到另外一個物件的空屬性

技術標籤: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(); }