是否可以开箱即用深度复制 Object
?即手动编码clone
函数的任何其他方式。
答案 0 :(得分:5)
克隆不会必然执行深层复制。实际上,Object.clone()
的默认实现会创建浅副本。
如果对象的闭包由实现Serializable
或Externalizable
的对象组成,您可以使用ObjectOutputStream
和ObjectInputStream
来创建深层副本...但是它很贵。
cloning
库是另一种选择,但我对代码的初始读取是它依赖于图中每个对象的类,提供了无参数构造函数。然后它将修改生成的对象以获得原始对象状态的副本。这个过程可能会产生不良副作用,具体取决于no-args构造函数的实际作用。
简而言之,我认为没有通用解决方案。
答案 1 :(得分:0)
我建议使用java.lang.reflect。
java.lang.Class公开所有字段,允许读取公共字段和调用公共方法。
无法克隆没有访问者的私有字段。
答案 2 :(得分:0)
我简要地查看了cloning
库代码。它执行序列化所做的是获取对象内部的图形而不是写入文件,它写入内存位置=这是对象的克隆。因此虽然它比Serialization更快,但它肯定做同样的事情。