2016-05-31 8 views
-3

cloneのこの方法は正しいですか?毎回ランタイムエラーが発生しています。また誰もこのクラスのコピーコンストラクタを書く方法を提案できますか?自分のクラスのインスタンスを複製/コピーする方法は?

public class Pair { 
    final StringBuffer x; 
    final StringBuffer y; 

    public Pair(StringBuffer x, StringBuffer y) { 
     this.x = x; 
     this.y = y; 
    } 

    public StringBuffer getX() { 
     return x; 
    } 

    public StringBuffer getY() { 
     return y; 
    } 

    public Pair clone() { 
     Pair p = new Pair(new StringBuffer(), new StringBuffer()); 
     try { 
      p = (Pair) super.clone(); 
     } catch (CloneNotSupportedException e) { 
      throw new Error(); 
     } 
     return p; 
    } 
} 
+0

を実装する方がはるかに簡単ですか? –

+0

なぜコピーコンストラクタを持っていますか?そのコンストラクタは何をしますか? – Tom

答えて

3

コピーコンストラクタ:

public Pair(Pair other) { 
    this.x = new StringBuffer(other.x.toString()); 
    this.y = new StringBuffer(other.y.toString()); 
} 

あなたはする必要がありavoid using clone()

  • cloneほぼ病的
  • であることのポイントに、すべての状況で正しく実装するのは非常にトリッキーです
  • オブジェクトをコピーすることの重要性は、オブジェクトフィールドは、多くの場合、守備
  • コピーコンストラクタとstaticファクトリメソッドをコピーする必要があるため複製する代替手段を提供し、 `arraylist`は、タイトルとタグに記載されている
+1

さらに、 'clone'のネイティブ実装では、浅いコピーしか得られません。 –

関連する問題