【问题标题】:How to deep copy an object to another class object with same fields?如何将对象深度复制到具有相同字段的另一个类对象?
【发布时间】:2016-11-14 09:26:28
【问题描述】:

我有两个java类如下

public class A implements Serializable {

    private String name;
    private List<String> nameList;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<String> getNameList() {
        return nameList;
    }
    public void setNameList(List<String> nameList) {
        this.nameList = nameList;
    }   
}

public class B implements Serializable {

    private String name;
    private List<String> nameList;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<String> getNameList() {
        return nameList;
    }
    public void setNameList(List<String> nameList) {
        this.nameList = nameList;
    }   
}

现在我有一个 A 类对象 Aobj,两个字段都已初始化。我正在使用 BeanUtils.copyProperties(Bobj, Aobj),但只有 name 字段值被复制到 Bobj 中,但是 Bobj.nameList 为空。有没有办法深度复制一个对象,以便它复制所有字段,包括列表、地图等集合。

我在某处听说过 Dozer,但不确定这是否是为了这个目的。

【问题讨论】:

  • 为什么不手动复制呢? (例如使用复制常量。)
  • 是的,Dozer 正是针对这种用例而设计的。默认情况下,它在不同类类型的两个对象之间映射具有相同属性名称的字段。如有必要,您可以配置映射哪些字段、映射方式以及读取和设置值的方式。在您的特定情况下,默认映射可以正常工作。
  • @Ahmet AY 是的,我目前正在手动操作。问题是我的实际用例处理具有许多字段而不仅仅是 2 的对象,并且手动这样做对于不同的看起来太麻烦了。
  • @MarkusFischer 当然,我会研究如何使用推土机!
  • 听起来像XYProblem。为什么你有两个具有完全相同属性和方法的独立类?为什么需要克隆它们?

标签: java deep-copy


【解决方案1】:

有点奇怪,你有 2 个完全相同的不同类。但无论如何,为了将一个复制到另一个,只需在某个 Util 类中编写 2 个静态方法。一种方法将采用 A 类并返回 B 类,另一种方法将采用 B 并返回 A 类。您自己进行深度复制。此外,您可以创建与您的 A 类和 B 类相同的 C 类,然后使您的 A 类和 B 类只是空类,每个类都扩展 C。它会给您相同的结构,但会使您的复制逻辑尽可能容易只需将 A 和 B 作为 C 的实例即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2012-01-10
    • 2015-09-22
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多