【Java】Java中复制/克隆(Clone)一个对象
来源:互联网 发布:php exec 返回2 编辑:程序博客网 时间:2024/05/18 18:02
在开发过程中,可能会遇到我们需要一个和某个对象一样数据,但是不是同一个内存地址的新对象,这个时候就需要用到Clone()了.
不过要注意,Clone()分为浅拷贝和深拷贝.区别在于要拷贝的对象是否有非基本变量
准备复制的对象代码
public class CloneMan { /** * @fields id 克隆人id */ private int id; /** * @fields isM 克隆人性别 */ private boolean isM; getter... setter...}
CloneMan类只有基本变量类型的成员变量,那么Clone一个,只需要实现Cloneable接口,重写Clone()方法即可
public class CloneMan implements Cloneable{ /** * @fields id 克隆人id */ private int id; /** * @fields isM 克隆人性别 */ private boolean isM; public CloneMan clone() { try { return (CloneMan)super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); return null; } } getter... setter...}
通过clone()方法就可以获取到新的CloneMan对象.
但是,如果需要克隆的类的成员变量包括了非基本类型的,如String,那么这种方法就失效了.因为里面的非基本变量类型也需要重写clone()方法,这种方式我觉得太烦了.通过查找资料,我知道一个通过IO流来clone对象的方法,亲测有效
public static Object deepClone(Object obj) { //将对象写入流中 ByteArrayOutputStream bo = new ByteArrayOutputStream(); try { ObjectOutputStream oo = new ObjectOutputStream(bo); oo.writeObject(obj); //将对象从流中读出来 ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray()); ObjectInputStream oi = new ObjectInputStream(bi); return oi.readObject(); } catch (IOException e) { e.printStackTrace(); return null; } catch (ClassNotFoundException e) { e.printStackTrace(); return null; }}
注意:这里传入的Object要实现可序列化接口Serializable
这里得到的是一个Object对象,可以在获取后进行强转获取到想要的类型,我这里处理的是如果有异常返回的是null,所以获取后要进行一次非空判断.
因为这个是一个通用方法,可以卸载IOUtil中公用
阅读全文
0 0
- 【Java】Java中复制/克隆(Clone)一个对象
- java对象克隆clone
- java 对象 克隆 clone
- Java clone()克隆对象
- JAVA 对象克隆clone
- java对象克隆clone
- Java 对象克隆(clone)
- java clone 对象的深复制(深克隆)和浅复制(浅克隆)介绍
- Java对象复制--克隆
- Java| Java对象克隆Clone(1)
- Java| Java对象克隆Clone(2)
- arcobjects,arcengine中克隆一个对象Clone
- php 对象复制(克隆)clone()
- 关于java对象复制(clone)
- 关于java对象复制(clone)
- java克隆 对象(复制)
- Java克隆clone的浅复制与深复制
- java中clone一个对象的方法
- 河南电视台:让中原文化“云”中起舞
- xshell中svn命令整理
- linux环境下zookeeper集群搭建
- css 布局
- C++语言 运算符优先级表(转载)
- 【Java】Java中复制/克隆(Clone)一个对象
- storm基本概念小结
- 理解 iOS 的内存管理(唐巧博客)
- linux的mysql下看不到mysql数据库解决方案
- LeetCode题解–260. Single Number III
- 利用PowerDesigner绘制PDM生成SQL Server数据库
- Kafka剖析(一):Kafka背景及架构介绍
- 实现图片滑动、滚动、菜单栏(导航)滑动、文字滚动等效果的网页插件superslide2
- java的八大基本类型