我有以下课程
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;
...
}
但我需要为这个函数编写这么多代码,任何人都有更好的方法来实现这个功能吗? 非常感谢。
答案 0 :(得分:0)
当你说对象的深度克隆,特别是类A的类型,你有一个容器类型的实例变量时,你有两种众所周知的方式:
1)您对对象进行序列化和反序列化。
2)遍历每个方法并明确地调用clone。
首次实施时,您可以将 id 字段标记为瞬态,这样可以解决您的目的。
对于第二种方法,您可以覆盖将 id 字段设置为0 / -1的每个类中的clone方法,并调用super.clone()