對象深度複製

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @author lichujun
 * @date 2018/10/25 11:17
 */
public class Test {

    /**
     * 對象深度克隆
     */
    public static <T extends Serializable> T clone(T obj, Class<T> tClass){
        T cloneObj = null;
        try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
             ObjectOutputStream oos = new ObjectOutputStream(baos)) {
            //寫入字節流
            oos.writeObject(obj);
            //分配內存,寫入原始對象,生成新對象
            try (ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
                 ObjectInputStream ois = new ObjectInputStream(bais)) {
                //返回生成的新對象
                cloneObj = tClass.cast(ois.readObject());
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return cloneObj;
    }

    /**
     * List深度克隆
     */
    public static <T extends Serializable> List<T> clone(List<T> originList, Class<T> tClass) {
        List<T> desc = new ArrayList<>();
        originList.forEach(it ->
                desc.add(clone(it, tClass))
        );
        return desc;
    }
    
}
複製代碼
相關文章
相關標籤/搜索