Cloneable: Java における疑わしい慣行
Cloneable は、Java でのオブジェクトの複製を容易にするために設計されたインターフェースです。 Cloneable を実装することにより、クラスはインスタンスの複製または「クローン」を作成する機能を付与します。ただし、Cloneable には固有の制限と複雑さがあるため、使用しないことを強くお勧めします。
Cloneable の欠点
-
シャロー コピーとディープ コピー: クローン可能は、元のオブジェクトへの参照を持つ新しいオブジェクトを作成する浅いコピーのみをサポートします。オブジェクトのフィールド。これは、ネストされたオブジェクトがすべて元のオブジェクトとクローンの間で共有され、予期しない結果が生じることを意味します。
-
ディープ クローン作成の希望: ディープ クローン作成が必要な場合、クローン可能インターフェイスにはガイドラインがありません。またはサポートします。ディープ クローン作成メカニズムを実装するには、デフォルトのクローン作成動作をオーバーライドし、オブジェクト グラフを手動で走査する必要がありますが、これは困難な場合があります。
-
一貫性のない動作: クラスが異なると、Cloneable の実装方法が異なるため、クローン作成動作が一貫性がなくなります。 。一部のクラスは浅いクローン作成を実行する一方で、他のクラスは深いクローン作成を試み、予測できない結果が生じる可能性があります。
-
エラーが発生しやすい: デフォルトのクローン作成メソッドをオーバーライドすると、特に再帰構造を扱う場合にエラーが発生しやすくなります。
の欠点再帰的クローン作成
再帰的クローン作成は、クローン化されるオブジェクトに Cloneable を実装するネストされたオブジェクトへの参照が含まれている場合に問題が発生します。これにより、無限再帰、スタック オーバーフロー、または予期しないクローン作成動作が発生する可能性があります。
代替アプローチ
クローン可能の代わりに、次の手法の使用を検討してください。
-
コピー コンストラクター: カスタム コピー コンストラクターを作成します。オブジェクトのディープ コピーを実行します。
-
シリアル化: Java シリアル化フレームワークを使用して、オブジェクトをバイト ストリームにシリアル化し、それを逆シリアル化してクローンを作成します。
- 外部ライブラリ: ディープ クローン作成やディープ クローン作成に Apache Commons SerializationUtils などのライブラリを利用します。浅いクローン作成用の BeanUtils。
以上がJava のクローン可能インターフェイスを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。