深度克隆(复制)可变 Scala 对象的最简单方法是什么?
问问题
9660 次
2 回答
15
由于您想要深度复制 Scala 对象的最简单方法而不是最快方法,因此您始终可以序列化该对象,前提是它是可序列化的,然后再将其反序列化。以下代码仅在编译时运行,而不在 REPL 中运行。
def deepCopy[A](a: A)(implicit m: reflect.Manifest[A]): A =
util.Marshal.load[A](util.Marshal.dump(a))
val o1 = new Something(...) // "Something" has to be serializable
val o2 = deepCopy(o1)
于 2009-08-13T09:19:57.123 回答
7
一个特定于 Java 的解决方案(在 Scala 中也应该很好用)是Cloner 库。它快速、简单、深度克隆基于字段的对象(使用反射),并且足够聪明,不会克隆已知的不可变对象(如字符串、整数等)。最后,您可以注册自定义不可变对象,这样它也不会克隆它们。
我强烈推荐它。
于 2009-08-12T17:10:42.560 回答