import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public abstract class BeanCloneUtil {    @SuppressWarnings("unchecked")    public static  T cloneTo(T src) throws RuntimeException {        ByteArrayOutputStream memoryBuffer = new ByteArrayOutputStream();        ObjectOutputStream out = null;        ObjectInputStream in = null;        T dist = null;        try {            out = new ObjectOutputStream(memoryBuffer);            out.writeObject(src);            out.flush();            in = new ObjectInputStream(new ByteArrayInputStream(memoryBuffer.toByteArray()));            dist = (T) in.readObject();        } catch (Exception e) {            throw new RuntimeException(e);        } finally {            if (out != null)                try {                    out.close();                    out = null;                } catch (IOException e) {                    throw new RuntimeException(e);                }            if (in != null)                try {                    in.close();                    in = null;                } catch (IOException e) {                    throw new RuntimeException(e);                }        }        return dist;    }}

项目需求中遇到一个问题。需要将一个复杂的对象复制一个数据一样内存不一样的出来。

java中的复制貌似是除了数据类型之外,其他的都是传递对象内存地址。当你的这个对象中嵌套了list(T是一个class,不是数据类型)的时候,即便你用新的list去接收。

但是list里面的数据对象的内存地址还是一样,当你对新的list进行操作的时候。其实操作的还是老的list中的数据对象,应为他们内存地址一样。

为了避免这种情况,网上找了很多方法,有的说用clone,尝试过之后还是不行,个人觉得是对稍微简单的对象操作应该是没有问题,

如果说对象里面嵌套了list可能就不能达到预期的效果.有的说用collection.copy,但是最终还是浅拷贝,也不能达到预期效果。最终找到上面这个,简单好用,不过需要你的class能

实现Serializable接口。这个方法返回的数据对象就是一个全新的对象,内存地址不同



更多相关文章

  1. 类和 Json对象
  2. android 利用socket 发送Json数据demo
  3. Android(安卓)为Notification加上一个进度条
  4. Android(Java):jni源代码
  5. adb最新版下载地址
  6. android 获取网络上服务器图片
  7. eclipse 插件网址
  8. 读取Android设备的MAC地址
  9. 简析android:installLocation

随机推荐

  1. Android圆角bug
  2. Android(安卓)之 使用嵌入式关系型SQLite
  3. Android(安卓)系统启动
  4. Android(安卓)对话框(Dialog)大全 建立你
  5. Android开发指南-框架主题-基础知识
  6. android消息推送方案
  7. [置顶] Android系统下的动态Dex加载
  8. Android:实现一个轮播图(Banner)
  9. Android打开并浏览 Office PDF 等文件
  10. Android大图片裁剪终极解决方案(上:原理分