序列化拷贝方法
@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) + "\t" + user); System.out.println(System.identityHashCode(clone) + "\t" + clone); user.getAddress().setAddress("beijing"); System.out.println(user.hashCode() + "\t" + user); System.out.println(clone.hashCode() + "\t" + clone); }
需要被拷贝对象实现 Serializable 序列化接口,内部所有的属性也全部要实现序列化接口