假设我有一个创建的对象。我编辑了其中一些值,因此它与新的object()引用不同。我们称其为f1对象。现在我想要另一个名为f2的对象是f1的副本,但不是指针,这样当我改变f2中的值时,它不会同时改变f1。我应该如何在Java中实现这个目标?
假设我有一个创建的对象。我编辑了其中一些值,因此它与新的object()引用不同。我们称其为f1对象。现在我想要另一个名为f2的对象是f1的副本,但不是指针,这样当我改变f2中的值时,它不会同时改变f1。我应该如何在Java中实现这个目标?
首先,让你的类实现Cloneable
接口。如果没有这个接口,调用对象的clone()
方法会抛出异常。
接下来,重写Object.clone()
方法以返回你特定类型的对象。实现可以简单地如下:
@Override
public MyObject clone() {
return (MyObject)super.clone();
}
除非你需要完成更复杂的任务,否则只需调用 super.clone()
即可。
这将一直调用到 Object.clone()
,它会将对象中的每个数据复制到构造的新对象中。引用被复制而非克隆,因此,如果你需要深度拷贝(对象的克隆),则需要在重写的 clone()
函数中进行一些额外的工作。
使用类似以下的方式
f2 = f1.clone();
你可以克隆,如果你不能克隆,你可以自己编写函数。
function (variable){
clone = JSON.parse(JSON.stringify(variable))
return clone;
}