【问题标题】:Merge two complex objects ignoring null values [duplicate]合并两个忽略空值的复杂对象[重复]
【发布时间】:2020-10-24 12:08:37
【问题描述】:

我正在尝试找到一种方法来合并同一对象的不同实例。这样 Object2 会覆盖 Object1 但 Object2 具有空值的位置将 Object1 值保持原样。假设有一个 Object1 包含以下内容。

------
public class Object1 {
    private List<A> listOfTwoStrings;
    private List<B> classBContainsTwoStrings;
}
------
public class A {
    private String name;
    private String age;
}
------
public class B {
    private String name;
    private List<Attribute> attributes;
}
------
public class Attribute {
    private String attributeName;
    private String attributeValue;
}
------

我相信我一直在做的测试只是复制了一层,所以还没有。

public Object1 mergeObjects(Object1 object1, Object1 object2) throws
        IllegalAccessException, NoSuchFieldException {
    for (Field field : object2.getClass().getDeclaredFields()) {
        field.setAccessible(true);
        String name = field.getName();
        Object value = field.get(object2);

        //If it is a non null value copy to destination
        if (null != value) {

            Field destField = object1.getClass().getDeclaredField(name);
            destField.setAccessible(true);

            destField.set(object1, value);
        }
    }
    return object1;
}

【问题讨论】:

    标签: java


    【解决方案1】:

    你可以在 Object1 类中编写一个方法来进行合并

    public Object1 mergeObject( Object1 object2){
        if(object2.listOfTwoStrings != null){
           this.listOfTwoStrings = object2.listOfTwoStrings
        }
        ....
    }
    

    然后通过object_1.merge(object_2)调用它。

    我不会更改变量的可访问性。出于安全原因,私有字段应保持私有,但该变量中存储的值的管理可以由类来完成。

    【讨论】:

      猜你喜欢
      • 2015-04-12
      • 2019-08-27
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 2017-08-05
      • 1970-01-01
      • 2017-10-19
      相关资源
      最近更新 更多