È un metodo protetto (per design del lingaggio) che serve per creare una shallow copy di un oggetto (ottimo se i campi sono tutti primitivi, fare attenzione se i metodi sono riferimenti a oggetti). È necessario perché l’operazione di assegnazione non effettua una copia dell’oggetto, ma solo di riferimento all’oggetto.
N.B.:
x.clone() != x
è sempre vero perché gli operatori==
e!=
controllano le locazioni in memoria dell’oggetto.
N.B.:
clone()
non richiama il costruttore della classe.
Se si vuole fare una deep copy dei campi, riferimenti a altri oggetti compresi, bisogna fare l’overriding del metodo clone.
Implementazione della deep-copy di clone.
public intVector getCopy()
{
try
{
IntVector v = (IntVector).clone();
v.list = (ArrayList<Integer>)list.clone();
return v;
}
catch(CloneNotSupportedException e){return e}
}