项目中有一个场景是这样的,获取一个listA<bean>,然后new了一个集合B<bean>,使用B.addAll(A)来保存A,然后又对A进行了修改,但是发现集合B也跟着修改了。折腾半天才知道原来是集合的浅拷贝。在此记录,深拷贝方法之一的是:
bean实现序列化接口,然后封装一个方法如下:
public static <T> List<T> depCopy(List<T> srcList) { ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); try { ObjectOutputStream out = new ObjectOutputStream(byteOut); out.writeObject(srcList); ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray()); ObjectInputStream inStream = new ObjectInputStream(byteIn); List<T> destList = (List<T>) inStream.readObject(); return destList; } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return null; }
使用就是B=depCopy(A);