2

是否可以深拷贝Object开箱即用?clone即除了手动编码功能之外的任何其他方式。

4

3 回答 3

5
  1. 克隆不一定会执行深层复制。事实上,默认实现Object.clone()创建了一个拷贝。

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

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

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

于 2012-10-20T07:38:42.240 回答
0

我建议使用 java.lang.reflect。

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

只有没有访问器的私有字段不能被克隆。

于 2012-10-20T07:55:10.243 回答
0

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

于 2012-10-20T07:58:12.610 回答