2016-05-31 8 views
-3

Ist diese Art der Verwendung von clone korrekt? Ich erhalte jedes Mal einen Laufzeitfehler. Kann jemand auch eine Möglichkeit vorschlagen, einen Kopierkonstruktor in diese Klasse zu schreiben?Wie klonen/kopieren Sie eine Instanz meiner eigenen Klasse?

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

Wo ist der 'im Titel und Tag erwähnt arraylist'? –

+0

Warum haben Sie einen Kopierkonstruktor, wenn Sie ignorieren, was er tut? – Tom

Antwort

3

Ein Copykonstruktor:

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

Sie sollten avoid using clone():

  • clone ist sehr schwierig richtig unter allen Umständen zu implementieren, fast bis zu dem Punkt der pathologischen
  • sein
  • Die Wichtigkeit des Kopierens von Objekten bleibt immer bestehen, da Objektfelder müssen oft defensiv
  • Kopierkonstruktoren und statische Factory-Methoden eine alternative viel einfacher zu klonen, und bieten kopiert werden, um zu implementieren
+1

Darüber hinaus wird die native Implementierung von 'clone' Ihnen nur eine oberflächliche Kopie geben. –