方法實現很簡單
一種是序列化成數據流
第二種是將對象序列化為json
具體代碼如下
public class DeepCopy {
/**
* 深層拷貝
*
* @param <T>
* @param obj
* @return
* @throws Exception
*/
public static <T> T copy(T obj) throws Exception {
//是否實現了序列化接口
if(Serializable
//如果子類沒有繼承該接口
try {
return copyImplSerializable(obj);
} catch (Exception e) {
//這裡不處理
}
}
//如果序列化失敗
if(hasJson()){
try {
return copyByJson(obj);
} catch (Exception e) {
//這裡不處理
}
}
return null;
}
/**
* 深層拷貝
* @param <T>
* @param obj
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public static <T> T copyImplSerializable(T obj) throws Exception {
ByteArrayOutputStream baos = null;
ObjectOutputStream oos = null;
ByteArrayInputStream bais = null;
ObjectInputStream ois = null;
Object o = null;
//如果子類沒有繼承該接口
try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos
bais = new ByteArrayInputStream(baos
ois = new ObjectInputStream(bais);
o = ois
return (T) o;
} catch (Exception e) {
throw new Exception("對象中包含沒有繼承序列化的對象");
} finally{
try {
baos
oos
bais
ois
} catch (Exception e
//這裡報錯不需要處理
}
}
}
/**
* 是否可以使用json
* @return
*/
private static boolean hasJson(){
try {
Class
return true;
} catch (Exception e) {
return false;
}
}
/**
* 深層拷貝
* @param <T>
* @param obj
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public static <T> T copyByJson(T obj) throws Exception {
return (T)JSONObject
}
}
只需要調用copy方法就行
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20101.html