博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA对象克隆
阅读量:7026 次
发布时间:2019-06-28

本文共 979 字,大约阅读时间需要 3 分钟。

hot3.png

答:有两种方式: 
  1). 实现Cloneable接口并重写Object类中的clone()方法; 
  2). 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆,代码如下。

import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;public class MyUtil {    private MyUtil() {        throw new AssertionError();    }    @SuppressWarnings("unchecked")    public static 
T clone(T obj) throws Exception { ByteArrayOutputStream bout = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bout); oos.writeObject(obj); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bin); return (T) ois.readObject(); // 说明:调用ByteArrayInputStream或ByteArrayOutputStream对象的close方法没有任何意义 // 这两个基于内存的流只要垃圾回收器清理对象就能够释放资源,这一点不同于对外部资源(如文件流)的释放 }}

转载于:https://my.oschina.net/u/1867229/blog/831280

你可能感兴趣的文章
CSS那些事儿——居中布局
查看>>
React-Redux的用法
查看>>
从字节码角度看String、StringBuffer、StringBuilder的不同
查看>>
Swift 中的安全性
查看>>
js技术 - 收藏集 - 掘金
查看>>
vue1.0和vue2.0区别(一)
查看>>
Theano - 代数(Algebra)
查看>>
CSS_JS_Tips
查看>>
HTTPS时代,免费SSL获取与配置(Apache版)
查看>>
使用TensorFlow训练Weibo.cn验证码
查看>>
docker运行consul cluster
查看>>
中台微服务了,那前端呢?
查看>>
为你打造一场专业的全球架构师峰会
查看>>
在ASP.NET Core应用程序中使用分布式缓存
查看>>
架构设计复杂度的6个来源
查看>>
Oracle在开源Mission Control后将其开发团队解散
查看>>
QLoo推出用于现有服务的GraphQL接口
查看>>
Nexus指南中的更新强调集成和透明度的重要性
查看>>
在大规模系统中使用Scala
查看>>
精益业务分析宣言解读
查看>>