可以说我有一个创建的对象。我编辑了一些值,因此它与我引用的新对象()不同。让我们调用这个对象f1。现在我想要另一个名为f2的对象是f1的副本,但不是指针,所以当我在f2中更改一个值时,它不会改变f1。我将如何去在java中做这个?我如何在java中创建对象的副本,而不是指针
2
A
回答
12
首先,你的班级实施Cloneable
界面。没有这个,在你的对象上调用clone()
就会抛出一个异常。
接下来,覆盖Object.clone()
,以便它返回您的特定类型的对象。实现可以简单地为:
@Override
public MyObject clone() {
return (MyObject)super.clone();
}
除非你需要更复杂的工作。请确保你打电话super.clone()
。
这将调用层次结构的所有方法到Object.clone()
,它将对象中的每个数据片段复制到它构建的新数据片段中。引用是复制的,而不是克隆的,所以如果你想要一个深层拷贝(对象引用的对象的克隆),你需要在被覆盖的clone()
函数中做一些额外的工作。
1
您使用clone。
5
大多数对象有一个方法clone()将返回该对象的副本,所以你的情况
f2 = f1.clone()
1
使用类似
f2 = f1.clone();
如果你有自定义属性(或会员),你应该重写你的类中的克隆来进行深层复制。您可以了解浅,这里深拷贝
http://javapapers.com/core-java/java-clone-shallow-copy-and-deep-copy/
-2
,你可以克隆,或者如果你不能克隆你可以编写自己的功能吧。
function (variable){
clone = JSON.parse(JSON.stringify(variable))
return clone;
}
+0
问题是关于Java而不是JavaScript – 2015-04-28 20:27:30
相关问题
- 1. 如何创建uiview的副本(不是指向原始uiview的指针)
- 2. 如何创建对象的副本?
- 3. 如何解析变量的副本而不是指针?
- 4. 创建我的对象的副本
- 5. 在创建防御副本时创建新对象而不是克隆
- 6. 创建对象的副本
- 7. 使用指针结构,而不是创建静态本地副本
- 8. C++:创建一个共享的对象,而不是共享的对象指针
- 9. 创建对象的指针
- 10. 如何在java中创建数组而不是引用的副本?
- 11. 如何在不创建副本的情况下返回对象?
- 12. 在C++中创建对象指针
- 13. 如何在C#中创建对象的引用副本?
- 14. 如何在ActionScript中创建对象的未引用副本
- 15. 如何在JavaScript中创建File对象的修改副本?
- 16. reinterpret_cast是否存储对象指针的副本?
- 17. 如何导入模块而不在Android Studio中创建副本
- 18. 创建对象的独立副本
- 19. 创建包裹对象的副本
- 20. 具有抽象类指针的对象的C++副本
- 21. 在Java中使用对象的副本
- 22. 如何创建一个指向对象的指针
- 23. PHP,是在某些情况下创建的对象的副本?
- 24. 如何声明对象,而不是创建新对象?
- 25. 创建对象的指针列表
- 26. 创建指针对象的向量
- 27. 是否存在无法创建深层副本的对象?
- 28. 如何制作指针的副本
- 29. 为什么我们在iphone中创建的大多数对象都是指针
- 30. 如何在C++中创建对象时将对象指针推向矢量?
这个问题的重复:http://stackoverflow.com/questions/869033/how-do-i-copy-an-object-in-java – 2011-03-25 17:15:09
我beleive您可以用克隆方法,如果做到这一点你的对象实现可复制。 http://download.oracle.com/javase/tutorial/java/IandI/objectclass.html获取更多信息 – blong824 2011-03-25 17:16:07