是否可以深拷贝Object
开箱即用?clone
即除了手动编码功能之外的任何其他方式。
问问题
967 次
3 回答
5
克隆不一定会执行深层复制。事实上,默认实现
Object.clone()
创建了一个浅拷贝。如果对象的闭包由实现
Serializable
or的对象组成Externalizable
,您可以使用ObjectOutputStream
andObjectInputStream
来创建深层副本......但它很昂贵。该
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 回答