我想要做的是定义一个复制构造函数 将A作为参数,并将新A初始化为深度 参数A的副本
public class A<E extends Comparable<? super E>> implements B<E>
{
private A a;
private E[] hArray;
// What I tried .... my copy constructor
public A(A other)
{
this.a = other; // deep copy
}
}
这是通过复制构造函数进行深层复制的正确方法吗?
答案 0 :(得分:4)
这不是一本很深的副本。您只是将引用存储到另一个对象。
试试这个:
public A(A other) {
if(other.a != null) {
this.a = new A(other.a);
}
if(other.hArray != null) {
this.hArray = new E[other.hArray.length];
for(int index = 0; index < other.hArray.length; index++) {
this.hArray[index] = other.hArray[index].clone();
}
}
}
这假设E还有一个执行深层复制的复制构造函数。另外我只是注意到E是通用的,所以我的代码可能无法正常工作(但想法就在那里)。
答案 1 :(得分:1)
如果您想要深层复制,则不能只分配 - 这不是深层复制的含义。你需要去:
public A(A other)
{
if(other != null) {
this.a = new A(other.a); // deep copy
} else {
this.a = null;
}
}
这是递归复制,但你可以结束所有类型的无限循环。另外,你需要以某种方式深度复制E
,这些泛型有点令人难以置信,所以我不会试图推测你如何做到这一点。