一、Serializable实现深拷贝
package testClone;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Hashtable;
public class Test {
public static void main(String args[]) throws Exception {
A a = new A();
A aCloneA = MyUtil.clone(a);
a.b.j = 5;
a.ht.put(1, new B());
a.a[0][0] = 5;
System.out.println(a.b.j);
System.out.println(aCloneA.b.j);
System.out.println(a.ht.size());
System.out.println(aCloneA.ht.size());
System.out.println(a.a[0][0]);
System.out.println(aCloneA.a[0][0]);
}
}
class A implements Serializable {
int i = 1;
int a[][] = new int[2][2];
B b = new B();
Hashtable<Integer, B> ht = new Hashtable<>();
}
class B implements Serializable{
int j = 2;
}
class MyUtil {
private MyUtil() {
throw new AssertionError();
}
@SuppressWarnings("unchecked")
public static <T extends Serializable> 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();
}
}