日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

怎么样实现对一个对象的深拷贝

發布時間:2023/11/29 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 怎么样实现对一个对象的深拷贝 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題:怎么樣實現對一個對象的深拷貝

使用深拷貝的方法有點難實現啊。要保證原來的對象和克隆對象不是共享同一個引用的步驟是什么啊?

回答一

一種安全的方法是先序列化對象,然后反序列化。這保證了所有東西都是一個新的引用。

這里有一篇關于如何高效實現這個的文章。

注意:類可能會重寫序列化的方法,這樣就不會創建新的實例,例如對于單例來說,如果你的類不是可序列化的,這當然也不會生效啦。

回答二

實現深拷貝的一種方法是向每個關聯的類添加復制構造函數。一個復制構造函數接受’this’的一個實例作為其單個參數,并從這個實例中復制所有值。這函數要干非常多的工作,但是也是非常直接和安全。

編輯:注意你不需要使用訪問方法來讀取屬性。你可以直接訪問所有屬性,因為源實例總是與具有復制構造函數的實例具有相同的類型。這是很明顯的,但可能會被忽視了。

例子:

public class Order {private long number;public Order() {}/*** Copy constructor*/public Order(Order source) {number = source.number;} }public class Customer {private String name;private List<Order> orders = new ArrayList<Order>();public Customer() {}/*** Copy constructor*/public Customer(Customer source) {name = source.name;for (Order sourceOrder : source.orders) {orders.add(new Order(sourceOrder));}}public String getName() {return name;}public void setName(String name) {this.name = name;} }

注意,如果復制構造函數的話,你需要知道你復制的那個對象運行的時候是什么類型的。所以上面的方法,你不能簡單第用來復制一個混合類型的list(你要用一些反射的代碼去完成)

文章翻譯自Stack Overflow:https://stackoverflow.com/questions/64036/how-do-you-make-a-deep-copy-of-an-object

總結

以上是生活随笔為你收集整理的怎么样实现对一个对象的深拷贝的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。