深层复制对象

时间:2012-10-20 07:07:33

标签: java object copy

是否可以开箱即用深度复制 Object?即手动编码clone函数的任何其他方式。

3 个答案:

答案 0 :(得分:5)

  1. 克隆不会必然执行深层复制。实际上,Object.clone()的默认实现会创建副本。

  2. 如果对象的闭包由实现SerializableExternalizable的对象组成,您可以使用ObjectOutputStreamObjectInputStream来创建深层副本...但是它很贵。

  3. cloning库是另一种选择,但我对代码的初始读取是它依赖于图中每个对象的类,提供了无参数构造函数。然后它将修改生成的对象以获得原始对象状态的副本。这个过程可能会产生不良副作用,具体取决于no-args构造函数的实际作用。

  4. 简而言之,我认为没有通用解决方案。

答案 1 :(得分:0)

我建议使用java.lang.reflect。

java.lang.Class公开所有字段,允许读取公共字段和调用公共方法。

无法克隆没有访问者的私有字段。

答案 2 :(得分:0)

我简要地查看了cloning库代码。它执行序列化所做的是获取对象内部的图形而不是写入文件,它写入内存位置=这是对象的克隆。因此虽然它比Serialization更快,但它肯定做同样的事情。