可以說我有一個創建的對象。我編輯了一些值,因此它與我引用的新對象()不同。讓我們調用這個對象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