2011-10-14 10 views
6

私はObjectCloneableのjavadocを読んでいます。 Cloneableがそれに縛ら任意のメソッドを持っていないのでクローンの有無にかかわらずクローンをオーバーライド

public class Widget implements Cloneable 
{ 
    @Override 
    public Widget clone() 
    { 
      // ... return a clone of this Widget 
    } 
} 

、とのみ:

public class Widget 
{ 
    @Override 
    public Widget clone() 
    { 
      // ... return a clone of this Widget 
    } 
} 

..and:誰かが私には、性能および/または2次の例の機能の違いを説明していただけますObjectのprotected clone()メソッドへのアクセスを提供していますが、それは最初に実装することさえ知っていて、自分の(安全な)clone()コードを書かなくてはなりません?任意の明確化/入力のために事前に感謝します。

答えて

5

これはcontractual obligationです。スローされる例外 CloneNotSupportedExceptionに Cloneableインタフェース結果を実装していないインスタンス上のオブジェクトのクローンメソッドを呼び出す

無効にする方法はありませんが、のインターフェイスを実装しています。これを行うには、それ以降の契約に付属するすべてを取る。これにより、あなたは故意にclone()メソッドを実装して、動作を明示的にしなければなりません。

+0

非常に興味深い - ありがとう! – IAmYourFaja

+0

リンクが機能しなくなった – marcospgp

0

a)クローニングは、コンストラクタを使用せずにオブジェクトを構築する異言語的方法を呼び出します。

b)クローニングでは、何とかCloneNotSupportedExceptionを処理する必要があります。または、クライアントコードを処理するために気にする必要があります。

c)メリットが小さい - 手動でコピーコンストラクタを作成する必要はありません。 したがって、Cloneable judioslyを使用してください。すべての権利を申請するために必要な努力と比較して、あなたに十分な利益を与えるものではありません。

About Java cloneable

関連する問題