实现对象克隆

实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆,代码如下

package com.lovo;  
  
import java.io.ByteArrayInputStream;  
import java.io.ByteArrayOutputStream;  
import java.io.ObjectInputStream;  
import java.io.ObjectOutputStream;  
  
public class MyUtil {  
  
    private MyUtil() {  
        throw new AssertionError();  
    }  
  
    public static <T> T clone(T obj) throws Exception {  
        ByteArrayOutputStream bout = new ByteArrayOutputStream();  
        ObjectOutputStream oos = new ObjectOutputStream(bout);  
        oos.writeObject(obj);  
  
        ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());  
        ObjectInputStream ois = new ObjectInputStream(bin);  
        return (T) ois.readObject();  
          
        // 说明:调用ByteArrayInputStream或ByteArrayOutputStream对象的close方法没有任何意义  
        // 这两个基于内存的流只要垃圾回收器清理对象就能够释放资源  
    }  
}  

来源:https://www.cnblogs.com/roucheng/p/javatimu.html

posted @ 2018-07-21 12:42  天涯已可  阅读(153)  评论(0编辑  收藏  举报