をオブジェクトを複製するのに必要なものです?どのようなリアルタイムの例も理解に役立ちます。</p> <p>は、私はJavaでオブジェクトのクローンを作成する必要がありますなぜ私が思っていたなどのオブジェクトの浅い/深いコピーを作成する方法、Javaの
答えて
かなり頻繁に、あなたはケースのクローニングは、コードの重要な部分である不変オブジェクトを、使用したいです。たとえば、リストまたは配列型フィールドを持つ不変オブジェクトがある場合、不変性を保持するために、ゲッターは常にリストまたは配列のクローンを返す必要があります。あなたは、いくつかの状態変更メソッドを呼び出すだけで、それらのすべてが成功した場合、結果が見えるようにしたいときは、「トランザクション」の変更をしたいとき
他の典型的なユースケース
です。あなたが不変オブジェクトのフィールドとしてリストを持つと言ったように、私はゲッターでそのリストのクローンを返さなければならないが、私は新しいリストを作成し、それを返すことができる。また、リストのインターフェイスは、クローンメソッドを持っていません実装クラスのみがメソッドをクローンしている。私はなぜクローンを使用する必要がありますか? – Anand
@anand私は、一般的な操作としてのクローニングを意味しました。クローン作成の1つの方法は、確かにコピーコンストラクタを使用することです。もう一つは 'clone()'メソッドを実装することです。クローニングをどのように達成するかは重要ではありませんが、一方の方法は他方の方法と同じくらい良い方法です。 – biziclop
何かのクローンコピーを持つことは、「前」バージョンと「後」バージョンを持つことができることを意味します。コピーを使って何かを試している間は、オリジナルをそのままにしておくことができます。元のバージョンに戻すだけで元に戻すことができます。
私はそれを理解しています。しかし、あなたが私にオリジナルのオブジェクトだけを残してオブジェクトのコピーでテストしなければならない実際のインスタンスを私に教えてもらえれば、それは私に物事をより明確にします。 – Anand
私は@biziclopがあなたがコピーをテストしたいシナリオを提案したと思います。つまり、おそらくトランザクションでコピーが成功したかどうかをテストする必要があります。検証の問題やデータベーストランザクションの失敗のためにコピーが成功しない場合は、コピーを破棄して再作成せずに元の状態に戻すことができます。 – DOK
はい、私はそれを得ました。もう一つは、私はオブジェクトを初期化するときにオブジェクトを複製するのが高価すぎるということを読んでいます。新しいオブジェクトを作成するのではなく、既存のオブジェクトを複製して新しいインスタンスに重要なプロパティを変更するだけです。それに光? – Anand
オブジェクトの深いクローンコピーを使用することができます。これは、後で使用する方法で部分的な結果が必要な場合があるためです。
エンキャプシュレーションを維持するために、コードをより堅牢にする方法として、ゲッターから戻す前にオブジェクトをクローンすることができます。たとえば、getDateメソッドは、呼び出し元に戻る前に日付フィールドをクローンします。
あなたが言ったように、私は戻る前に日付フィールドを複製することができますが、私はまた、新しい日付オブジェクトを作成することができますなぜここでクローンを使用する必要がありますか? – Anand
クローニングの具体的な例は次のとおりです。 prototype design pattern
自身のクローンを作成するよう、我々は、オブジェクトのクローンを言うとき、それは既存のものの別の同じオブジェクトを作成したり、持っていることを意味Javaではので、何かの重複コピーを言います。
クローニングはいつですか?我々が作成し、新しいオブジェクトのを見てたびに時間がかかる場合や、我々は、我々は、クローニングを使用して、すべての準備ができて作成されたオブジェクトw.r.t同じか少し差を有する新たなオブジェクトが必要です。
クローニング
- シャローコピー
- ディープコピー
シャローコピーをクローニング
浅いコピー処理であるJavaで3種類の
ありますオブジェクトの状態は別のオブジェクトにコピーされるbu両方のオブジェクトは、ヒープ領域内の同じ参照を指しています。ディープコピー
ディープコピーでは、2つの別々のオブジェクトが作成され、ディープコピーでいます。これで、あるオブジェクトの各フィールドが別のオブジェクトにコピーされます。
今、Javaでこの困難を克服するための第三のカテゴリーは、クローニングの概念です。
クローン化は、クローン可能なインタフェースを実装しています。 Cloneableはマーカーインターフェイスです。
クローニングについての深い知識を参照してください:Cloning in java
- 1. Treesetのクローン()の証明は、Javaで浅いコピーを作成しますか?
- 2. Javaでjsonオブジェクトを作成する必要があります。私はどうしますか?
- 3. なぜ私は `QApplication`のオブジェクトを作成する必要があり、PyQt GUIプログラミングの目的は何ですか?
- 4. 私が働いているクラスのインスタンスを作成する必要があるのはなぜですか?
- 5. 私はjavaで配列リストを作成する必要がありますか?
- 6. Javaでオブジェクトを作成する方法はいくつありますか?
- 7. "new"で作成されたDateオブジェクトを変数に格納する必要はありますか?</p> <pre><code>var t = (new Date()).getTime(); </code></pre> <p>またはそのようなオブジェクトが悪いの作成:
- 8. は、私は<strong>式以下があり</strong>オブジェクトを持っているのjava
- 9. Java PlugInの作成方法は?私はOMEのプラグインとしての私のJavaプログラムを作成する必要があり
- 10. C:構造体の深いコピーを作成する...構造体の浅いコピーを作成する
- 11. Javaの関数でオブジェクトを作成できないのはなぜですか?
- 12. 私のオブジェクトのコピーを作成する
- 13. javaでオブジェクトの作成に必要なCPUサイクル数はいくつですか?
- 14. 私は述語オブジェクトのクローンを作成したい述語
- 15. ディープコピーは、浅いコピーが深いコピーが私の場合には動作しない理由
- 16. Cloneableを実装していないオブジェクトのクローンを作成する方法
- 17. DjangoでDBオブジェクトの深いクローンを作成するにはどうしたらいいですか?
- 18. Javascriptを:私はこのようなオブジェクトを作成する必要が
- 19. <select>は動作しない必要があります
- 20. javaの文字列(実際のファイルコンテンツ)からsmooksオブジェクトを作成するには?私はJavaでSmooksのオブジェクトを作成するコードを以下のいた
- 21. は、私はJavaのスイングと、このポップアップを作成する必要が作成JavaのSwingの
- 22. PGTとPGTIOUの保存CASが生成する
- 23. ので(ビューを作成するためにステップ私は構文を必要といけないが、私は必要なMS Accesss</p> <p>でビューを作成したい、私はその中の5つの表</p> <p>を持つMSACCESS 2007年にデータベースを持っている
- 24. なぜJavaで</p> <p>現在、HashMapの::私は私の心に疑いを持っている
- 25. は、どのように私は私はこのようなチャートを作成する必要があります#
- 26. この例で列挙型でオブジェクトを作成する必要がないのはなぜですか?
- 27. は、私が</p> <p>Imは、50%のTE中に同一の多数のオブジェクトを生成するので、私は私と思っ幅アンドロイドSDKを働いている私は、Javaに新たなんだキーオブジェクト
- 28. 「データフレーム」オブジェクトは、「データフレーム」オブジェクトが属性「ソート」</strong></p> <p>を持っていない私は私のpythonパッケージに私はnumpyのをインストールする必要があり、ここでいくつかの問題に直面しているが、私はまだ、このエラー<strong>を持って
- 29. VBA - 私は<em>ノード</em>オブジェクトを作成していたループ
- 30. Java GUIの作成にはどのような方法が必要ですか?
[Javaでclone()メソッド]の可能な重複(http://stackoverflow.com/questions/6384826/clone-method-in-java) ...またはhttp://stackoverflow.com/questions/6182565/java-deep-copy-shallow-copy-cloneまたはhttp://stackoverflow.com/questions/5279256/is-clone-in-java-shallow-コピー、または他の何十もの。新しい質問をする前に検索を使用してください。多くの人が尋ねられ答えられました。 –
こんにちはブライアン。私はそれを検索しましたが、ほとんどの投稿では、浅いコピーと深いコピーの実装または違いのみが与えられました。私は浅い/深いクローンについて知っています。ちょうどJavaでオブジェクトをクローン化する理由を知りたいのですが? – Anand