Costruire un costruttore di copia in Java

Come si costruisce un costruttore di copie che riceve un altro punto (x, y) e ne copia i valori?

Decido una firma: public Point1 (Point1 other) , ma non so cosa scrivere in esso …

La class Point si presenta come:

 public class Point1 { private int _x , _y; public Point1 (Point1 other) { ... ... } //other more constructors here... } 

Provai:

 public Point1 (Point1 other) { _x = other._x ; _y = other._y; } 

Ma sono quasi sicuro di poterlo fare meglio ..

thnx

No, il tuo tentativo di

 public Point1(Point1 other) { _x = other._x ; _y = other._y; } 

va assolutamente bene … (Ho corretto il tipo di parametro).

Sarei tentato di fare _x e _y final e rendere la finale della class, ma è perché mi piacciono i tipi immutabili. Altri sicuramente hanno opinioni diverse 🙂

La clonazione su una gerarchia di ereditarietà è leggermente più complicata: ogni class nella gerarchia deve avere un costruttore pertinente, passare qualsiasi argomento che è dato al costruttore della superclass e quindi copiare solo i propri campi. Per esempio:

 public class Point2 extends Point1 { private int _z; public Point2(Point2 other) { super(other); this._z = other._z; } } 

Questo non è male per il lato dell’implementazione, ma se vuoi clonare fedelmente un Point2 devi sapere che è un Point2 per chiamare il costruttore giusto.

Implementare Cloneable permette di farlo un po ‘più semplicemente, ma ci sono altre cose da considerare intorno a questo … in pratica gli oggetti di clonazione non sono così semplici come potrebbe sembrare 🙂 (Sono sicuro che c’è una voce in Java efficace per Se non ne hai una copia, comprala subito.)