Java深度克隆没有某些属性的对象

时间:2014-12-02 08:44:44

标签: java

我有以下课程

class A {
    private Long id
    private List<B> listB;
    private C c;
    ...
}

class B {
    private Long id
    private A a;
    private List<D> listD;
    ...
}

class C {
    private Long id
    private A a;
    ...
}

class D {
    private Long id
    private B b;
    ...
}

我需要A的副本,包括除了所有id列以外的所有属性。

我有两个解决方案:
1.克隆每个对象并将所有id设置为null;
2.制作一个这样的构造函数:

public A (A a){
    //copy all properties except id
    this.xxx = a.xxx;
    ...
}

但我需要为这个函数编写这么多代码,任何人都有更好的方法来实现这个功能吗? 非常感谢。

1 个答案:

答案 0 :(得分:0)

当你说对象的深度克隆,特别是类A的类型,你有一个容器类型的实例变量时,你有两种众所周知的方式:

1)您对对象进行序列化和反序列化。

2)遍历每个方法并明确地调用clone。

首次实施时,您可以将 id 字段标记为瞬态,这样可以解决您的目的。

对于第二种方法,您可以覆盖将 id 字段设置为0 / -1的每个类中的clone方法,并调用super.clone()