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. adb最新版下载地址
  2. 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 内存复用 | 弱引
  3. Android 异步获取网络图片并处理图片Out Of Memory 内存溢出问题
  4. android取得账户(邮件地址)
  5. android 使用Intent传递对象 Serializable 或者 Parcelabel 《第
  6. Android从SD卡和Res读取图片,防止发生OOM内存移除
  7. 查看基于Android 系统单个进程内存、CPU使用情况的几种方法
  8. 【转】android好文章或博客地址收藏

随机推荐

  1. Android(安卓)更改键盘Enter键文字
  2. android之【代码实现ImageView图片切换】
  3. Delphi XE5 Android 调用 Google ZXing
  4. android 图片叠加效果——两种方法
  5. [掌眼]iOS / Android / java / node.js
  6. Android startActivities()的使用
  7. 启动android模拟器没有反应,Failed to ope
  8. Android实现ListView点击事件+SQLite数据
  9. android典型监听事件实
  10. Android(安卓)Sensor感应器介绍(一)重力感