1. 程式人生 > >Java深度拷貝物件

Java深度拷貝物件

今天看到一種java類實現了Serializable介面後物件深拷貝的方法,所以記錄一下型別,T一定要實現Serializable介面。

public static <T> T CloneObj(T t) throws Exception{
    Serializable serializable = (Serializable) t;
    return SerializationUtil.clone(serializable);
}

public class SerializationUtil {
    /**
     * 獲取一個可Serializable物件的深度拷貝
     * 替換 SerializationUtils.clone
     * @param srcObj 源物件
     * @return Object 深度拷貝物件
     */
    public static <T> T clone(T t) {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(t);
            ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
            return (T)ois.readObject();
        } catch (Exception e) {
            Logger.error(e.getMessage(), e);
            throw new Exception(e.getMessage(), e);
        }
    }
}