How to merge two complex objects in java

前端 未结 5 1381
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-01 23:23

I have two java objects and I want to merge them into single object. Problem is the two objects does not contain plain primitive type properties(fields) they contain complex

5条回答
  •  自闭症患者
    2021-01-01 23:40

    try this

    public  T objectMerge(T local, T remote, boolean toappend) throws Exception {
        Class clazz = local.getClass();
        Object merged = clazz.newInstance();
        for (Field field : clazz.getDeclaredFields()) {
            field.setAccessible(true);
            Object localValue = field.get(local);
            Object remoteValue = field.get(remote);
            if (localValue != null) {
                String key = "";
                if (localValue.getClass().getSimpleName().toLowerCase().contains("map")) {
                    key = "map";
                } else if (localValue.getClass().getSimpleName().toLowerCase().contains("set")) {
                    key = "set";
                } else if (localValue.getClass().getSimpleName().toLowerCase().contains("list")) {
                    key = "list";
                } else {
                    key = localValue.getClass().getSimpleName();
                }
                switch (key) {
                    case "Default":
                    case "Detail":
                    case "String":
                    case "Date":
                    case "Integer":
                    case "Float":
                    case "Long":
                    case "Double":
                    case "Object":
                        field.set(merged, (remoteValue != null) ? remoteValue : localValue);
                        break;
                    case "map":
                        if (toappend) {
                            ((Map) localValue).putAll((Map) remoteValue);
                        } else {
                            localValue = (remoteValue != null) ? remoteValue : localValue;
                        }
                        field.set(merged, localValue);
                        break;
                    case "list":
                        if (toappend) {
                            ((List) localValue).addAll((List) remoteValue);
                        } else {
                            localValue = (remoteValue != null) ? remoteValue : localValue;
                        }
                        field.set(merged, localValue);
                        break;
                    case "set":
                        if (toappend) {
                            ((Set) localValue).addAll((Set) remoteValue);
                        } else {
                            localValue = (remoteValue != null) ? remoteValue : localValue;
                        }
                        field.set(merged, localValue);
                        break;
                    default:
                        field.set(merged, this.objectMerge(localValue, remoteValue, toappend));
                        break;
                }
            }
        }
        return (T) merged;
    }
    

提交回复
热议问题