序列化拷贝方法
@SuppressWarnings("unchecked")
public static <T extends Serializable> T clone(T obj) {
T cloneObj = null;
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ois = new ObjectInputStream(bais);
cloneObj = (T) ois.readObject();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (oos != null) {
oos.close();
}
if (ois != null) {
ois.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return cloneObj;
}
测试
public class Address implements Serializable { private String address;
public class User implements Serializable { private Integer id; private String name; private Integer age; private Address address;
public static void main(String[] args) { Address address = new Address("wuhan"); User user = new User(1, "asds", 18, address); User clone = clone(user); System.out.println(System.identityHashCode(user) + " " + user); System.out.println(System.identityHashCode(clone) + " " + clone); user.getAddress().setAddress("beijing"); System.out.println(user.hashCode() + " " + user); System.out.println(clone.hashCode() + " " + clone); }
