让我说我有一个我创造的对象。我在其中编辑了一些值,因此它与我引用的新对象()不同。让我们调用该对象f1。现在我想要另一个名为f2的对象是f1的副本而不是指针,所以当我改变f2中的值时,它也不会改变f1。我将如何在java中执行此操作?
答案 0 :(得分:15)
首先,让您的类实现Cloneable
接口。如果没有这个,在对象上调用clone()
将抛出异常。
接下来,覆盖Object.clone()
,以便它返回您特定类型的对象。实施可以简单地是:
@Override
public MyObject clone() {
return (MyObject)super.clone();
}
除非你需要更复杂的东西。但请务必致电super.clone()
。
这将在层次结构中一直调用Object.clone()
,它将对象中的每个数据复制到它构造的新数据。引用是复制的,而不是克隆的,因此如果您需要深层复制(对象引用的对象的克隆),您需要在被覆盖的clone()
函数中执行一些额外的工作。
答案 1 :(得分:6)
大多数对象都有一个方法clone(),它会返回该对象的副本,所以在你的情况下
f2 = f1.clone()
答案 2 :(得分:2)
您使用clone。
答案 3 :(得分:2)
使用类似
的内容f2 = f1.clone();
如果您有自定义属性(或成员),则应覆盖类中的clone以进行深层复制。您可以在这里了解浅层和深层复制
http://javapapers.com/core-java/java-clone-shallow-copy-and-deep-copy/
答案 4 :(得分:0)
答案 5 :(得分:-3)
你可以克隆,或者如果你不能克隆,你可以为它编写自己的函数。
function (variable){
clone = JSON.parse(JSON.stringify(variable))
return clone;
}