在我的项目中,我操作一个由Objects组成的多维数组。操作后我想"重置"数组。我测试了几十个"深拷贝"来自这里和整个网络的代码,但似乎没有人使用多维数组。我是关于Java 7.你能提供一个提示吗?
通过重置我的意思是在操作之前的初始状态。所以我想创建我的阵列的备份并在以后恢复它。
答案 0 :(得分:0)
我相信这应该可以完成相关数组的深层复制。
private static class CloneableObject
implements
Cloneable {
@Override
public CloneableObject clone() {
return new CloneableObject();
}
}
CloneableObject[][] original;
void someMethod() {
CloneableObject[][] copy = Arrays.copyOf(this.original, this.original.length);
for (int i = 0; i < copy.length; i++) {
copy[i] = Arrays.copyOf(copy[i], copy[i].length);
for (int j = 0; j < copy[i].length; j++) {
copy[i][j] = copy[i][j].clone();
}
}
/*
* Manipulation of this.original is to be done here
* None of the manipulations will be reflected in copy
*
* Note that (this.original[n][m] == copy[n][m]) will evaluate to false,
* where n and m are arbitrary indices of the array.
*/
this.original = copy; // "reset"
}
如果希望不复制Object
的实例,只需删除内部循环。