Clonare un oggetto in Java
- Usa il metodo diretto per clonare un oggetto in Java
-
Usa la funzione
clone()
per clonare un oggetto in Java - Usa un costruttore di copia per clonare un oggetto in Java
La clonazione di oggetti è una tecnica per creare un duplicato esatto di un oggetto. Crea una nuova istanza della classe dell’oggetto corrente e riempie tutti i suoi campi con il contenuto esatto dei campi dell’oggetto corrente.
In questo tutorial, cloneremo un oggetto in Java.
Usa il metodo diretto per clonare un oggetto in Java
In questo metodo, creeremo un nuovo oggetto e assegneremo un oggetto precedentemente definito come suo valore.
Vedere il seguente esempio.
public class shallowcopy implements Cloneable {
int a, b;
public static void main(String args[]) throws CloneNotSupportedException {
shallowcopy d = new shallowcopy();
d.a = 10;
d.b = 12;
shallowcopy dtwo = d;
System.out.println("Original " + d.a);
System.out.println(d.b);
System.out.println("Shallow Copy " + dtwo.a);
System.out.println(dtwo.b);
d.a = 5;
System.out.println("Copy after modifying original");
System.out.println(dtwo.a);
}
}
Produzione:
Original 10
12
Shallow Copy 10
12
Copy after modifying original
5
Nel codice sopra, abbiamo modificato l’originale e abbiamo visto le modifiche riflesse nella copia creata. Tale clone è chiamato copia superficiale.
Prima di restituire una nuova istanza della stessa classe, la copia superficiale produce una nuova istanza della stessa classe e ne copia i campi. I contenuti di un oggetto vengono trasferiti a un nuovo oggetto in questa procedura. Tuttavia, entrambi gli oggetti fanno riferimento agli stessi valori, quindi qualsiasi modifica apportata agli oggetti collegati si rifletterà negli altri. La classe oggetto ha una funzione clone e una capacità di copia superficiale. La classe oggetto ha una funzione clone e una capacità di copia superficiale.
Usa la funzione clone()
per clonare un oggetto in Java
Per clonare un oggetto, utilizzare il metodo clone()
della classe Object. È il modo più rapido per duplicare un array.
La classe il cui oggetto clone vogliamo generare deve implementare l’interfaccia Cloneable. Se l’interfaccia Cloneable non è implementata, la funzione clone()
genera una CloneNotSupportedException
.
La funzione clone()
elimina la necessità di ulteriori elaborazioni quando si effettua una replica esatta di un oggetto. Se lo facciamo utilizzando new
, ci vorrà molto tempo per l’elaborazione, motivo per cui utilizziamo invece la clonazione degli oggetti. Lo useremo per creare una copia profonda.
Quando un elemento viene duplicato insieme agli oggetti a cui fa riferimento, viene chiamato copia completa. Eventuali modifiche apportate alla copia non si riflettono sull’originale.
Per esempio,
import java.util.ArrayList;
public class deepcopy implements Cloneable {
int a, b;
public Object clone() throws CloneNotSupportedException {
return (deepcopy) super.clone();
}
public static void main(String args[]) throws CloneNotSupportedException {
deepcopy d = new deepcopy();
d.a = 10;
d.b = 12;
System.out.println("Original " + d.a);
System.out.println(d.b);
deepcopy dtwo = (deepcopy) d.clone();
System.out.println("Deep Copy " + dtwo.a);
System.out.println(dtwo.b);
d.a = 5;
System.out.println("Copy after modifying original");
System.out.println(dtwo.a);
}
}
Produzione:
Original 10
12
Deep Copy 10
12
Copy after modifying original
10
Nell’esempio sopra, le modifiche apportate all’originale non si riflettono nella copia completa.
Usa un costruttore di copia per clonare un oggetto in Java
Un costruttore inizializza un oggetto di qualche classe. Il costruttore di copie può creare un oggetto duplicato di qualche classe.
Vedere il codice seguente per vedere come inizializzare una classe di questo tipo.
class copycon {
public String cc;
public copycon(String s) {
this.cc = s;
}
public copycon(copycon different) {
this.cc = different.cc; // copy constructor
}
}
class Main {
public static void main(String args[]) {
copycon c1 = new copycon("abc");
copycon c2 = new copycon(c1);
System.out.println(c2.cc);
}
}
Produzione:
abc
Ciò non otterrebbe una clonazione profonda in Java.