關於物件深拷貝的一個方法(非Cloneable方式)
阿新 • • 發佈:2019-02-16
背景:
一個很值得細品的問題:Java的深拷貝和淺拷貝。
要實現深拷貝的一個可行方法是讓物件實現Cloneable介面,然後重寫Object的clone()方法。改方案在網上有很多的教程。
這篇部落格的目的是為了記錄我找到的一個另外的方法。
方法:
利用中間過渡的方法,把物件轉化為Json,再由Json轉化為物件,那麼兩者之間就會引用分離,實現深拷貝的效果。
程式碼:
public class CopyUtil { /** * 深層拷貝 * @param obj 需要拷貝的物件 * @param classType 被拷貝物件的型別 * @return 深拷貝的物件 */ public static <T> T Copy(Object obj,Class<T> classType) { String json = new Gson().toJson(obj); return new Gson().fromJson(json, classType); } }
在這裡需要匯入google 的Gson包.
題外話:
這裡只提供一種非實現Cloneable介面而完成的深拷貝方案,至於兩者孰優孰劣並沒有做對比。