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 に答える