変更可能なScalaオブジェクトを深く複製(コピー)する最も簡単な方法は何ですか?変更可能なScalaオブジェクトを深く複製(コピー)する最も簡単な方法は何ですか?
9
A
答えて
14
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)
6
Java固有のソリューション(Scalaでもうまくいくはずです)は、Cloner libraryです。これは、高速で簡単で、深くオブジェクトをフィールドに基づいて(リフレクションを使用して)クローンし、既知の不変オブジェクト(String、Integerなど)をクローン化しないほどスマートです。最後に、カスタム不変オブジェクトを登録して、それを複製しないようにすることもできます。
非常にお勧めします。
+0
初めてClonerライブラリについて聞いたことがあります。非常に便利ですね! –
関連する問題
- 1. Webサービスを複製する最も簡単な方法は何ですか?
- 2. NSMenuItemsを複製する最も簡単な方法は何ですか?
- 3. は.jsファイルで、変更可能なデータを保持する最も簡単な方法ですか?
- 4. mnesiaスキーマを更新する最も簡単な方法は何ですか?
- 5. Androidの複雑なシリアライズ可能なオブジェクト - 簡単な方法
- 6. dockerfileでファイルとディレクトリをコピーする最も簡単な方法
- 7. Androidアプリにインストール可能なコンポーネントを追加する最も簡単な方法は何ですか?
- 8. Magento - SQLの変更を可能にする最も簡単なモジュール構成は何ですか?
- 9. C#で既存のXML形式を複製する最も簡単な方法
- 10. ScalaのリフレクションMethodSymbol/MethodSignatureをJavaメソッドに変換する最も簡単な方法は何ですか?
- 11. Androidで水平バーを描く最も簡単な方法は何ですか?
- 12. Pythonで分離可能な3D点をプロットする最も簡単な方法
- 13. intをbyte []にコピーする最も簡単な方法
- 14. オブジェクトにプロパティを設定する最も簡単な方法は?
- 15. Winforms - スレッドセーフな方法でプロパティを更新する最も簡単な方法は何ですか
- 16. 本番用のmysqlデータベースで複雑なスキーマ更新を行う最も簡単な方法は何ですか?
- 17. Scrapyでhttp.responseオブジェクトを取得する最も簡単な方法
- 18. 最も簡単な方法
- 19. 最も簡単な方法
- 20. Scalaでreify(式のASTを取得)を使用する最も簡単な方法は何ですか?
- 21. スタティック/グローバル機能をモックする最も簡単な方法は?
- 22. JavaでScala PartialFunctionを実装する最も簡単な方法は何ですか?
- 23. このXMLドキュメントを自分のオブジェクトに変換する最も簡単な方法は何ですか?
- 24. OSXでPostgreSQLを設定する最も簡単な方法は何ですか?
- 25. XAMLでScrollViewerをスタイルする最も簡単な方法は何ですか
- 26. RailsでERBを実装する最も簡単な方法は何ですか?
- 27. プロミスをES6でラップする最も簡単な方法は何ですか?
- 28. Javaでカスタムバイナリデータメッセージを設定する最も簡単な方法は何ですか?
- 29. 春の最も簡単で最も透過的な方法をキャッシングする方法は何ですか?
- 30. Qtで多くのオブジェクトをアニメーション化する最も簡単な方法
ニースの答え!これよりずっと簡単にはできません! –
私は少し[テスト](https://gist.github.com/4409b8562ac24fc042b0)でしたが、_ClassNotFoundException_(ケースクラスはシリアライズ可能です)を取得し続けています。 – Tralamazza