14

深度克隆(复制)可变 Scala 对象的最简单方法是什么?

4

2 回答 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 回答