Java 泛型数组深度复制和克隆泛型对象

Java generic array deep copy and cloning generic object

我想深拷贝一个 n 维的原始数组。

public static double[] deepCopy(double[] arr) {
    return arr.clone();
}

public static double[][] deepCopy(double[][] arr) {
    arr = arr.clone();
    for (int i = 0; i < arr.length; i++) {
        arr[i] = deepCopy(arr[i]);
    }
    return arr;
}

public static double[][][] deepCopy(double[][][] arr) {
    arr = arr.clone();
    for (int i = 0; i < arr.length; i++) {
        arr[i] = deepCopy(arr[i]);
    }
    return arr;
}

以上是深度复制1、2、3维双精度数组的代码。我想泛化任何原始类型 and/or 泛化数组的维度。两个我都想要,但是我知道Java里面的很多东西是不可能的,所以如果你只能得到一个也没关系,或者告诉我为什么它行不通。

谢谢!

要深度复制多维数组,请使用以下代码。

请注意,这只是 array 值的深拷贝,而不是数组中任何非数组值的深拷贝,因此该拷贝仅对多维基元而言才是真正的深拷贝阵列。多维对象数组深浅

数组的声明类型无关紧要。例如。 Object[][] 可以包含数组对象,使其(部分)成为 3D 数组。那些第 3 维数组也被复制了。

该方法将复制一维对象数组,而不是一维原始数组。要复制一维原始数组,请使用 clone().

@SuppressWarnings("unchecked")
public static <T> T[] deepCopyArray(T[] array) {
    return (T[]) deepCopyArrayInternal(array);
}
private static Object deepCopyArrayInternal(Object array) {
    int length = Array.getLength(array);
    Object copy = Array.newInstance(array.getClass().getComponentType(), length);
    for (int i = 0; i < length; i++) {
        Object value = Array.get(array, i);
        if (value != null && value.getClass().isArray())
            value = deepCopyArrayInternal(value);
        Array.set(copy, i, value);
    }
    return copy;
}