問題タブ [cloneable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
282 参照

java - コンストラクターと複製可能をコピーします。Cloneable を考慮すべきではないのはなぜですか?

私はこの回答を読んでいましたが、彼はリンクに言及しました、著者は、Cloneableを使用すべきではない理由を説明しています。しかし、そこに記載されていることにまだ疑問があります

Cloneable の配列がある場合、その配列を実行し、すべての要素を複製して配列のディープ コピーを作成できると思うかもしれませんが、それはできません。Cloneable には public clone メソッドがなく、 Object もないため、何かを Cloneable にキャストして clone メソッドを呼び出すことはできません。Cloneable にキャストして clone メソッドを呼び出そうとすると、コンパイラはオブジェクトに対して保護された clone メソッドを呼び出そうとしていると言うでしょう。

しかし、ここで私はやった

私は Cloneable 配列を作成することができました、そして私は作者がエラーを引き起こすと言ったことをしましたか、または私は作者の声明を誤解しましたか? 誰でも、CloneableではなくCopy Constructorを選択する理由を理解するのを手伝ってください。

0 投票する
2 に答える
934 参照

java - 同じパッケージで継承を使用して保護された clone() メソッドにアクセスできない理由

継承によって、すべてのクラスがオブジェクトクラスからメソッドを継承することを知っています。同様に、あるクラスを他のクラスで拡張すると、メソッドも継承します。次に、継承された保護されたメソッドを他のクラスから呼び出すことができ、継承されたメソッドを Object クラスから呼び出すことができない理由

上記のファイルで、Testclass のインスタンスを使用して someClassSpecificMethod にアクセスできるのに、なぜ clone メソッドにアクセスできないのでしょうか?

0 投票する
1 に答える
577 参照

java - プロトタイプはアンチパターンですか?

Joshua Bloch が Cloneable インターフェースが Java で壊れていると述べたとき、メソッドを使用しclone()てオブジェクトの作成を容易にするプロトタイプ パターンが Java 開発のアンチパターンと見なされないのはなぜですか?

「Cloneable が壊れているのは残念ですが、それは起こります。」- ジョシュア・ブロック

0 投票する
1 に答える
723 参照

java - Java: セッターは `Clone` を作成する必要がありますか、それとも呼び出し元が `new` コピーを渡すかです。

セッターが呼び出された後、オブジェクトを外部から変更できないようにしたい場合、ベストで一般的な方法と考えられるものは何ですか? コードには、2 つのオプションのジレンマを使用した、簡単で自己説明的な詳細な例があります。

0 投票する
3 に答える
2159 参照

java - 次のスニペットを使用してディープ クローンを作成できるのに、なぜ Cloneable を実装するのか

上記の ColoredCircle クラスには、testClone() という名前のメソッドがあり、Deep Cloning とまったく同じように機能します。今、クローンを作成するために Cloneable を実装する必要があるという事実について混乱していますか? また、上記のプログラムは一種の Deep cloning ですか?

0 投票する
1 に答える
141 参照

java - 同じクラス内のクローン関数

私はJavaでいくつかのシミュレーションを行っています。ツリーのノードを数ステップ先にシミュレートしてから、すべての変更を破棄して元の状態に戻そうとしています。しかし、 clone() は適切な結果を返しません。

ノード クラス:

トラッカー クラス:

プレイヤークラス:

注: org.apache.commons.lang.SerializationUtils のような apache 関数を使用することはできません

0 投票する
3 に答える
217 参照

java - 未知の (サブ) タイプのオブジェクトをクローンする唯一の方法は、恐ろしいクローン イディオムを使用することですか?

すべて共通のスーパークラス (「マネージド」) に根ざしたオブジェクトのコレクションを管理するクラス (「マネージャー」) があります。マネージャー クラスは、選択された管理対象オブジェクトのコピーを作成する必要がある場合がありますが、それが Managed のどのサブクラスであるかを知る方法はありません。これを行うための最良の方法は (それだけではないにしても) Cloneable を使用することだと私には思えます。次に、コピーする必要があるマネージド オブジェクトに対して、managedObject.clone() を呼び出します。もちろん、適切に実装する必要があります。「コピーコンストラクターを使用するだけ」またはすべてのサブクラスに myManagedSubClass.copy() メソッドを実装するようにという多くの警告を読みました。タイプを知る必要があるため、「実際の」コピーコンストラクターの使用方法がわかりません。

copy() メソッドを実装すると、次のようになると思います。

しかし、私の使用法では、戻り値を期待される型にキャストする必要があります。すべての Managed サブクラスに copy() を実装するのを忘れていた場合、サブクラス型にキャストされたスーパークラスになってしまいます。直接コピーに有効なクラスであるため、Managed でコピー保護された可視性を作成できません。そうでない場合でも、コピー可能なすべてのサブクラスにコピーを実装し、可変フィールドのディープ コピーを処理するすべての機構を実装するか、すべてを処理する共通名の保護されたメソッドの独自のプロトコルを確立する必要があります。そのレベルのスーパークラスによって導入された可変フィールド。

Cloneableに対する一般的な怒りと憎しみにもかかわらず、それは私がやりたいことをするための最良の方法であるようです. 何か不足していますか?