ホームページ > Java > &#&チュートリアル > Java `clone()` メソッドをオーバーライドする必要がありますか?オーバーライドする場合はどのようにすればよいですか?

Java `clone()` メソッドをオーバーライドする必要がありますか?オーバーライドする場合はどのようにすればよいですか?

Linda Hamilton
リリース: 2024-12-01 02:01:10
オリジナル
1089 人が閲覧しました

Should You Override the Java `clone()` Method, and If So, How?

Clone メソッドのオーバーライド: ベスト プラクティスの探索

Java 以降、すべてのクラスは Object クラスを継承するため、clone メソッドのオーバーライドが必須になります。ただし、主に Object クラスの実装からキャストされる潜在的な CloneNotSupportedException が原因で、このプロセスは複雑になる可能性があります。

同僚によって提案された 1 つの一般的なアプローチは、クローン メソッド内で例外を処理することです。

@Override
public MyObject clone() {
    MyObject foo;
    try {
        foo = (MyObject) super.clone();
    } catch (CloneNotSupportedException e) {
        throw new Error();
    }

    // Deep clone member fields here

    return foo;
}
ログイン後にコピー

このアプローチは最適ではありません。業界専門家の Josh Bloch 氏が強調したように、Java のクローン メソッドには根本的な欠陥があります。クローン作成に依存するのではなく、コピー コンストラクターやコピー ファクトリなどの実行可能な代替手段を検討することをお勧めします。

代替アプローチ:

  • コピー コンストラクター: 同じ型のオブジェクトをパラメータとして受け入れて初期化するコンストラクタをクラス内に手動で定義します現在のオブジェクトとそのフィールド。
  • コピー ファクトリ: オブジェクトをパラメータとして受け取り、入力オブジェクトのフィールドで初期化された新しいオブジェクトを返す静的メソッドをクラス内に作成します。

クローン作成が必要な場合:

場合clone メソッドのオーバーライドが避けられない場合は、クラスが Object を拡張し、Cloneable を実装していることを確認してください。これにより、CloneNotSupportedException がスローされないことが保証されます。例外をキャッチする代わりに、わかりやすくするためにこの動作を説明するコメントを追加することを検討してください。

他の StackOverflow 貢献者が提案しているように、super.clone を呼び出さずに clone メソッドを実装することもできます。

以上がJava `clone()` メソッドをオーバーライドする必要がありますか?オーバーライドする場合はどのようにすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート