問題タブ [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.
java - クローニングは、コンストラクタ/ファクトリ メソッドよりもパフォーマンスを向上させますか?
オブジェクトのインスタンス化の代わりにクローンを使用しているように見える古い Java コード ベース (jvm 1.4) を維持しています。パフォーマンスの最適化として推測しています。これは不自然な例です:
時期尚早の最適化に関する通常の警告にもかかわらず、これは実際にある時点で推奨されるイディオムでしたか?
c# - c# で ICloneable を実装する必要があるのはなぜですか?
ICloneable
メソッドを継承して実装する必要がある理由を説明してもらえますClone()
か?
ディープ コピーを実行したい場合、メソッドを実装することはできませんか? としましょうMyClone()
か?
から継承する必要があるのはなぜICloneable
ですか? 利点は何ですか?コードを「読みやすく」するだけの問題ですか?
java - Java: Cloneable インターフェースの理論的根拠
インターフェイス.clone()
でメソッドが指定されなかったのはなぜですか?java.lang.Cloneable
java - Java オブジェクトがシリアライズ可能であり、クローン可能ではないことが理にかなっているのはいつですか?
Java クラスがSerializable
インターフェースを実装しているがパブリック メソッドを持たない場合clone()
、通常は次のようなディープ コピーを作成できます。
私はこのようなサードパーティのライブラリ クラスによく遭遇し、上記のようなハックに頼っています。ObjectOutputStream
場合によっては、コピーを浅くするために拡張することさえありました。非効率的であること以外に、重大な問題が発生したことはありません (エンコード/デコードが遅く、一時的なシリアル化グラフが大量のメモリを消費する可能性があります)。
この手法を安全に使用できない場合は、おそらくクラスを宣言すべきではありませんSerializable
。
だから私が知りたいのは、あなたのクラスSerializable
が.clone()
Cloneable
java - クローンメソッドを適切にオーバーライドする方法は?
スーパークラスを持たないオブジェクトの1つにディープクローンを実装する必要があります。
CloneNotSupportedException
スーパークラス(である)によってスローされたチェックを処理するための最良の方法は何Object
ですか?
同僚から、次のように処理するようにアドバイスされました。
これは私には良い解決策のように思えますが、StackOverflowコミュニティにそれを投げて、他に含めることができる洞察があるかどうかを確認したいと思いました。ありがとう!
java - instanceof - 互換性のない条件付きオペランドの型
以下は正常にコンパイルされます。
しかし、これはしません:
コンパイラ エラーがスローされます。
何が問題ですか?
java - Object[] はどのように複製可能ですか
これは、o/p として true を返します。私はなぜ理解できませんでしたか?
java - Clonable を Java に実装する
どのような場合にこの方法を使用する必要がありますか:
そして、どの場合にそのように使用する必要がありますか:
x
が final で、最初の方法を使用したい場合はどうすればよいですか?
最初の方法については、次のように理解しています。スーパークラスを複製してアップキャストしたため、一部のメンバーが初期化されていません。この後、これらのメンバーを初期化します。私の理解は正しいですか?
ありがとうございました。
java - クローン可能インターフェイスとスローする必要のある例外に関する質問
Javaのドキュメントには次のように書かれています。
クラスはCloneableインターフェースを実装して、Object.clone()メソッドに、そのメソッドがそのクラスのインスタンスのフィールドごとのコピーを作成することが合法であることを示します。
Cloneableインターフェイスを実装していないインスタンスでObjectのcloneメソッドを呼び出すと、例外CloneNotSupportedExceptionがスローされます。
慣例により、このインターフェースを実装するクラスは、パブリックメソッドでObject.clone(保護されている)をオーバーライドする必要があります。このメソッドのオーバーライドの詳細については、Object.clone()を参照してください。
このインターフェースにはcloneメソッドが含まれていないことに注意してください。したがって、オブジェクトがこのインターフェイスを実装しているという事実だけでオブジェクトのクローンを作成することはできません。cloneメソッドが反射的に呼び出されたとしても、それが成功するという保証はありません。
そして私はこのUserProfile
クラスを持っています:
そして、ネズミイルカをテストするために、私はこれを次のように行いますmain()
:
これまでのところ、コンパイル/実行に問題はありません。さて、ドキュメントの私の理解によればimplements Cloneable
、クラスから削除するとUserProfile
、呼び出しで例外がスローされるはずup1.clone()
ですが、そうではありません。
この辺りでCloneableインターフェースが壊れていることを読みましたが、それが何を意味するのか本当にわかりません。私は何かが足りないのですか?