Java中实现深拷贝的方法—学习笔记
来源:互联网 发布:阿克苏怎样优化网站 编辑:程序博客网 时间:2024/05/20 19:12
类实现Cloneable接口,然后用调用clone()方法,那么返回的只是一个浅拷贝的对象,基本属性的值是拷贝过来了而引用类型还是指向了被拷贝对象的引用类型。
方法一:类实现一个标记接口Serializable通过IO流来实现对象的深拷贝
public class Menus implements Serializable{private static final long serialVersionUID = -5763470826096290328L;private int num;private List<String> list;public Object deepClone() throws Exception { // 将对象写到流里 ByteArrayOutputStream bo = new ByteArrayOutputStream(); ObjectOutputStream oo = new ObjectOutputStream(bo); oo.writeObject(this); // 从流里读出来 ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray()); ObjectInputStream oi = new ObjectInputStream(bi); return (oi.readObject()); }public int getNum(){return num;}public void setNum(int num){this.num = num;}public List<String> getList(){return list;}public void setList(List<String> list){this.list = list;}}
生成一个Menus对象,然后调用deepClone()方法就能获得一个深拷贝的Menus对象。 方法二:实现接口Cloneable
public class Menus implements Cloneable{private int num;private List<String> list;@SuppressWarnings("unchecked")@Overrideprotected Menus clone() throws CloneNotSupportedException{Menus result = (Menus)super.clone();result.list = ((List<String>)((ArrayList<String>)list).clone());return result;}public int getNum(){return num;}public void setNum(int num){this.num = num;}public List<String> getList(){return list;}public void setList(List<String> list){this.list = list;}}
调用clone()方法生成一个克隆对象是没有调用构造函数的。 0 0
- Java中实现深拷贝的方法—学习笔记
- 2种方法实现java对象的深拷贝
- Java实现文件拷贝的方法
- java学习笔记-数组,对象的拷贝
- 【c++编程思想学习笔记】解决浅拷贝的两种方法:(深拷贝)(引用计数+写拷贝)
- Java中object的clone()方法的浅拷贝和深拷贝
- java中clone方法的理解(深拷贝、浅拷贝)
- ArrayList深拷贝的一种实现方法
- 深拷贝的一种实现方法
- ArrayList深拷贝的一种实现方法
- ArrayList深拷贝的一种实现方法
- Java的clone方法--深拷贝和浅拷贝
- java Object的clone方法,浅拷贝与深拷贝
- Java开发学习笔记:Java实现多线程的方法
- python学习笔记——浅拷贝与深拷贝
- Python学习笔记——深拷贝与浅拷贝
- java学习笔记-JAVA中toString方法的作用
- js 数组的深拷贝和浅拷贝三种实现深拷贝的方法
- 委托和字典的结合使用
- HDU 2019 JAVA
- vuex快速上手
- 初探JVM堆内存
- OpenGL中如何实现通过鼠标点击选取对象(正交投影)
- Java中实现深拷贝的方法—学习笔记
- 从cobar到mycat的基本使用
- 从感知器到神经网络
- cordova学习五 真机调试
- HDU 2020 JAVA
- 伯努利分布(Bernoulli distribution)
- Android Based control -- CBAlignTextView
- Java泛型详解
- Supervisor重新加载配置启动新的进程