1. 程式人生 > >關於物件深拷貝的一個方法(非Cloneable方式)

關於物件深拷貝的一個方法(非Cloneable方式)

背景:

      一個很值得細品的問題: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介面而完成的深拷貝方案,至於兩者孰優孰劣並沒有做對比。