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

时间:2009-08-12 17:02:52

标签: scala clone

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:7)

特定于Java的解决方案(在Scala中应该也很有效)是Cloner library。它快速,简单,深度克隆基于字段(使用反射)的对象,并且足够聪明,不会克隆已知的不可变对象(如String,Integer等)。最后,您可以注册自定义不可变对象,以便它们也不会克隆它们。

我强烈推荐它。