Java:深度克隆/復制實例的推薦解決方案我想知道是否有一種在java中進行深度克隆/復制實例的推薦方法。我有三個解決方案,但我可能會錯過一些,我想聽聽你的意見。編輯:包括Bohzo提議和精煉問題:它更多的是關(guān)于深度克隆而不是淺克隆。自己動手:在屬性之后用手工屬性對克隆進行編碼,并檢查是否也克隆了可變實例。專業(yè):-對將要執(zhí)行的工作的控制-快速處決缺點:-編寫和維護繁瑣-易出錯(復制/粘貼失敗,丟失屬性,可重分配的可變屬性)使用反射:使用您自己的反射工具或外部助手(如JakartaCommon-bean),很容易編寫一個泛型復制方法,它將在一行中完成任務。專業(yè):-易于書寫-無維護缺點:-減少對發(fā)生情況的控制-如果反射工具也不克隆子對象,則容易出現(xiàn)易變對象的錯誤-執(zhí)行較慢使用克隆框架:使用一個為您服務的框架,比如:Common-lang序列化UtilsJava深度克隆庫杜澤爾克里奧專業(yè):-與反思相同-更多地控制將被克隆的東西。缺點:-每個可變實例都是完全克隆的,即使在層次結(jié)構(gòu)的末尾也是如此。-執(zhí)行起來可能會很慢使用字節(jié)碼工具在運行時編寫克隆javassit, BCEL或Cglib可能被用來像一只手一樣快速地生成一個專用的克隆人。有人知道用這些工具中的一個實現(xiàn)這個目的庫嗎?我錯過了什么?你推薦哪一個?謝謝。
3 回答

Cats萌萌
TA貢獻1805條經(jīng)驗 獲得超9個贊
Kryo kryo = new Kryo();SomeClass someObject = ...SomeClass copy1 = kryo.copy(someObject);SomeClass copy2 = kryo.copyShallow(someObject);
添加回答
舉報
0/150
提交
取消