如何在Java中实现包含对象数组的对象的深层副本?

时间:2014-08-18 14:57:40

标签: java clone

我需要创建一个名为Garage的实现Cloneable的类,并覆盖Object.clone()方法,以对Garage类型的对象进行深层复制,该对象包含一个数组Vehicle类型的对象。

我已经阅读过几个SO答案,Cloneable已被破坏,明智的不使用它,但我的实验室任务要求我实施Cloneable并编写适当的clone()方法。我一直在寻找很长的但仍然无法做到这一点。任何帮助将不胜感激。

这是Garage类的代码:

public class Garage extends Vehicle implements Cloneable {
    // array to store up to 15 Vehicle objects
    Vehicle array[] = new Vehicle[15];

    // overriding the clone method to perform a deeper copy
    @Override
    protected Object clone() throws CloneNotSupportedException {
        //TODO
    }
}

这是Vehicle类的代码:

public class Vehicle {
    int numWheels;
    int ID;
    String name;
}

1 个答案:

答案 0 :(得分:1)

首先Garage extends Vehicle毫无意义。我认为这是一个错误。 Garage a Vehicle

Garage中,您可以将clone实现为:

@Override
protected Object clone() {
    Garage other = new Garage ();
    for (Vehicle v : this.array) {
        other.addVehicle((Vehicle)v.clone());
    }
    return other;
}

然后,您必须在clone()类层次结构中实现Vehicle