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 サイトの他の関連記事を参照してください。