Scalaでは、AnyRef.clone
は浅いコピーまたは深いコピーを実行しますか?Scala AnyRef.cloneは、浅いコピーまたは深いコピーを実行しますか?
13
A
答えて
21
短答:浅い。
それほど短くない答え: それは上書きでない限り、AnyRef.cloneは()の実装としてJavaのObject.clone()を使用しています。 Object.cloneに
のJavadoc():
クラスオブジェクト 方法クローンは、特定のクローニング操作を行います。 最初に、このオブジェクトのクラス がインタフェース Cloneableを実装していない場合、 CloneNotSupportedExceptionがスローされます。 すべての配列は、 がCloneableインタフェースを実装すると見なされることに注意してください。 それ以外の場合は、このオブジェクトのクラス のクラスの新しい インスタンスを作成し、 のすべてのフィールドを、このオブジェクトの 対応するフィールドの内容とまったく同じように初期化します。 の内容はフィールド自体は複製されません。 したがって、このメソッドは、 "深い コピー"操作ではなく、このオブジェクトの "浅い コピー"を実行します。
ご注意:
- AnyRef.clone()は、Javaでその対応のように、どこからでも呼び出し可能なので、そのない、 "保護" アクセスレベルを持っています。
- clone()を機能させるには、Cloneableを実装する必要があります。
長い答え:オーバーライドクローンは慎重
概要:それを使用しないでください効果的なJavaの第2版、アイテム11をお読みください。より良い選択肢があります。
関連する問題
- 1. Javascriptスライスメソッドは深いコピーか浅いコピーを返しますか?
- 2. 配列の深いコピーまたは浅いコピーを複製しますか?
- 3. 深い対浅いコピー、参照渡し
- 4. スライス割り当て、浅い/深いコピー
- 5. スライシング操作で深くまたは浅いコピーが得られますか?
- 6. 浅いコピーが
- 7. オブジェクトはjavascriptの深いまたは浅いコピーで配列にプッシュされますか?
- 8. Pythonでは、関数は浅いか深いコピーを返しますか? Pythonでは
- 9. データ構造にデータを挿入するときに深いまたは浅いコピーがありますか?
- 10. ディープコピーは、浅いコピーが深いコピーが私の場合には動作しない理由
- 11. アーリーリストの浅いコピー
- 12. プリミティブによる浅いコピー
- 13. 浅いコピーJavaの整数
- 14. Javersでの浅いコピー
- 15. オブジェクトクローン浅いコピーは変数を変更しません
- 16. C:構造体の深いコピーを作成する...構造体の浅いコピーを作成する
- 17. LINQはコレクションの深いコピーを返しますか?
- 18. 値渡し/参照は深い/浅いコピーを作成するのと同等ですか?
- 19. 深いコピーはいつQListに起こりますか?
- 20. Treesetのクローン()の証明は、Javaで浅いコピーを作成しますか?
- 21. Grailsで深いまたは浅いJSONシリアライゼーションを選択
- 22. 独立したハッシュ(浅いコピー)に重複したハッシュ
- 23. Cでの浅いコピーとディープコピー
- 24. C++コンパイラの「浅い」コピーと代入
- 25. Python:深くastノードツリーをコピーします。
- 26. Python:浅く深いコピーコンストラクタの実装
- 27. オーディオの深いコピーCMSampleBuffer
- 28. 浅いクローニングと深いクローニング
- 29. C++ - ポインタを浅くコピーします。このコードはなぜ機能していますか?
- 30. コンストラクタをコピーする深さはどれくらいですか
"より良い選択肢があります。"あなたはいくつか参照してもらえますか? –
1. C++でコンストラクタをコピーします。 2. Scala 2.8.xに組み込みの "copy"メソッドを持つケースクラス。 3.不変オブジェクトを使用してください:コピーする必要はなく、共有するだけです。 –
C++のようなコピーコンストラクタは実際にはScalaでは大丈夫ですか?私はC++からその言語に来て、私の最初のコピーコンストラクタを実行する前に、私がいくつかの点を見逃しているかどうかを見たいと思っていました。 (私のオブジェクトは状態が変わります)。 – akauppi