5

「ベスト プラクティス」に関して、オブジェクトの「ディープ コピー」を作成するためにどの方法が好まれますか?

4

2 に答える 2

14

コピー コンストラクターを使用します。Cloneableまっすぐな API 災害です。有効な Java項目 10 (第 2 版の項目 11 )を参照してください。

項目 11:clone慎重にオーバーライドする

このインターフェースは、オブジェクトが複製を許可することをアドバタイズするためのmixin インターフェースCloneable(項目 18)として意図されていました。残念ながら、それはこの目的を果たせません。その主な欠点は、メソッドがなく、のメソッドが保護されていることです。リフレクション(項目 53) に頼らなければ、単に を実装しているという理由だけでオブジェクトのメソッドを呼び出すことはできません。オブジェクトにアクセス可能なメソッドがあるという保証がないため、リフレクティブ呼び出しでさえ失敗する可能性があります。cloneObjectclonecloneCloneableclone

于 2011-12-27T23:50:59.257 に答える
4

クローン可能なインターフェースの一般的な考え方には何の問題もありません。API ユーザーにとっては、コピー コンストラクターよりも簡単です。

Javaの問題もそれほど悪くはありませんCloneableObject.cloneそれらは少しの努力で克服できます。また、いつでも独自の複製可能なインターフェースを持つことができます。

Java 8 は、デフォルトの実装でメソッドをCloneable追加することで修正できますclone()

interface Cloneable
    public Object clone() default {  return Cloneables.defaultClone(this); }

彼らがそうする計画があるかどうかはわかりません。

于 2011-12-28T03:22:38.170 に答える