2

我想做的是定义一个以 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
    }
}

这是通过复制构造函数进行深度复制的正确方法吗?

4

2 回答 2

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 是通用的,因此我的代码可能无法正常工作(但想法就在那里)。

于 2012-11-23T01:49:04.783 回答
1

如果你想要一个深拷贝,你不能只分配 - 这不是深拷贝的意思。你需要去:

public A(A other)
{
    if(other != null) {
        this.a = new A(other.a);  // deep copy
    } else {
        this.a = null;
    }
}

那是递归复制,不过你可能会遇到各种无限循环。此外,您需要以E某种方式进行深度复制,而这些泛型让我难以置信,所以我不会试图推测您如何做到这一点。

于 2012-11-23T01:45:29.963 回答