「ベスト プラクティス」に関して、オブジェクトの「ディープ コピー」を作成するためにどの方法が好まれますか?
2 に答える
コピー コンストラクターを使用します。Cloneable
まっすぐな API 災害です。有効な Java項目 10 (第 2 版の項目 11 )を参照してください。
項目 11:
clone
慎重にオーバーライドするこのインターフェースは、オブジェクトが複製を許可することをアドバタイズするためのmixin インターフェース
Cloneable
(項目 18)として意図されていました。残念ながら、それはこの目的を果たせません。その主な欠点は、メソッドがなく、のメソッドが保護されていることです。リフレクション(項目 53) に頼らなければ、単に を実装しているという理由だけでオブジェクトのメソッドを呼び出すことはできません。オブジェクトにアクセス可能なメソッドがあるという保証がないため、リフレクティブ呼び出しでさえ失敗する可能性があります。clone
Object
clone
clone
Cloneable
clone
クローン可能なインターフェースの一般的な考え方には何の問題もありません。API ユーザーにとっては、コピー コンストラクターよりも簡単です。
Javaの問題もそれほど悪くはありませんCloneable
。Object.clone
それらは少しの努力で克服できます。また、いつでも独自の複製可能なインターフェースを持つことができます。
Java 8 は、デフォルトの実装でメソッドをCloneable
追加することで修正できますclone()
interface Cloneable
public Object clone() default { return Cloneables.defaultClone(this); }
彼らがそうする計画があるかどうかはわかりません。