Java 1.7 - 克隆对象和他内部的列表

时间:2017-01-04 09:13:02

标签: java arraylist clone

我正在尝试克隆在其中包含对象列表的对象。 我想克隆整个对象,也是他的列表。

我解释自己:

我有这个:

public class MyObject implements Cloneable{
    private long a;
    private List<AnotherObject> listA;
    private List<AnotherObject> listB;

    //getter and setter methods;

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

我创建了他的一个实例:

MyObject original = new MyObject();

假设我们已经使用了这个对象,因此我们将列表加载到他的内部。

现在,我想克隆它。

我做到了这一点,认为这已经足够了

MyObject clone = (MyObject) original.clone();

但是,在调试模式下检查原始和克隆的对象时,我看到它们的列表引用了相同的内存区域。

实际上,更改原始对象的listA元素,这个修改在克隆对象中也是可见的!

为了解决这个问题,我做了:

clone.setListA(new ArrayList<AnotherObject>(original.getListA());

这是一个很好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

可能你最好在MyObject#clone()方法中实现深度克隆,或者你可以使用一些深度克隆库,例如cloningKryo

答案 1 :(得分:0)

Java中有两种类型的克隆:浅层克隆和深度克隆。这个是浅层克隆。

请参阅以下显示如何实施深度克隆的文章: http://www.jusfortechies.com/java/core-java/deepcopy_and_shallowcopy.php