【发布时间】:2010-11-19 00:58:51
【问题描述】:
深度克隆(复制)可变 Scala 对象的最简单方法是什么?
【问题讨论】:
深度克隆(复制)可变 Scala 对象的最简单方法是什么?
【问题讨论】:
由于您想要深度复制 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)
【讨论】:
Cloner library 是一个特定于 Java 的解决方案(在 Scala 中也应该可以很好地工作)。它快速、简单、基于字段(使用反射)深度克隆对象,并且足够聪明,不会克隆已知的不可变对象(如字符串、整数等)。最后,您可以注册自定义的不可变对象,这样它也不会克隆它们。
我强烈推荐它。
【讨论】: