Class 的深拷贝,在 Java 中有大量子类

Deep copy for Class with massive subclass in Java

我有这个class

class Cars implements Transport, Serializable, Cloneable {
   private String type;
   private Models[] cars;
   private int number;
   private static final long serialVersionUID = 1L;

   Cars(String type, int number){
       this.type = type;
       this.number = number;
       cars = new Models[number];
       for (int i = 0; i < number; i++){
           cars[i] = new Models("default"+i, Double.NaN);
       }
   }
    private class Models implements Serializable{
       private String model;
       private double price;

我需要覆盖 clone() 以使用 super.clone() 深度复制此对象。我该怎么做?

您可能正在寻找 https://www.baeldung.com/java-deep-copy

中给出的内容

clone() 方法将为您return 提供一个浅拷贝。您必须使用新对象手动填充此浅表副本中的可变字段。这将使您的副本成为深层副本。

恕我直言,进行深度复制的最简单方法是为所有 类:

添加一个复制构造函数

Models 只有不可变属性,所以创建一个很容易:

public Models(Models other) {
    this(other.model, other.price);
}

不幸的是 Cars 也有一个可变属性(Models 的数组)所以我们需要一些不同的东西来复制这个属性:

public Cars(Cars other) {
    this.type = other.type;
    this.number = other.number;
    this.cars = Arrays.stream(other.cars)
        .map(Models::new)
        .toArray(Models[]::new);
}

不仅我们创建了一个新的阵列,而且每个个体Models也是全新的。请注意,此构造函数依赖于 Models.

的复制构造函数

因此,无需调用 Cars cloned = (Cars) myCar.clone();,您只需执行以下操作: Cars cloned = new Cars(myCar);