Klonen Sie ein Objekt in Java
- Verwenden Sie die direkte Methode, um ein Objekt in Java zu klonen
-
Verwenden Sie die Funktion
clone()
, um ein Objekt in Java zu klonen - Verwenden Sie einen Kopierkonstruktor, um ein Objekt in Java zu klonen
Das Klonen von Objekten ist eine Technik, um ein exaktes Duplikat eines Objekts zu erstellen. Es erstellt eine neue Instanz der Klasse des aktuellen Objekts und füllt alle seine Felder mit dem genauen Inhalt der Felder des aktuellen Objekts.
In diesem Tutorial werden wir ein Objekt in Java klonen.
Verwenden Sie die direkte Methode, um ein Objekt in Java zu klonen
Bei dieser Methode erstellen wir ein neues Objekt und weisen ein zuvor definiertes Objekt als seinen Wert zu.
Siehe das folgende Beispiel.
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);
}
}
Ausgabe:
Original 10
12
Shallow Copy 10
12
Copy after modifying original
5
Im obigen Code haben wir das Original geändert und die Änderungen in der erstellten Kopie gesehen. Ein solcher Klon wird als flache Kopie bezeichnet.
Bevor eine neue Instanz derselben Klasse zurückgegeben wird, erzeugt das flache Kopieren eine neue Instanz derselben Klasse und kopiert ihre Felder. Dabei wird der Inhalt eines Objekts auf ein neues Objekt übertragen. Beide Objekte beziehen sich jedoch auf dieselben Werte, sodass alle an den verknüpften Objekten vorgenommenen Änderungen in anderen widergespiegelt werden. Die Objektklasse hat eine Klonfunktion sowie eine flache Kopierfunktion. Die Objektklasse hat eine Klonfunktion sowie eine flache Kopierfunktion.
Verwenden Sie die Funktion clone()
, um ein Objekt in Java zu klonen
Um ein Objekt zu klonen, verwenden Sie die Methode clone()
der Klasse Object. Dies ist der schnellste Weg, ein Array zu duplizieren.
Die Klasse, deren Objektklon wir generieren möchten, muss das Cloneable-Interface implementieren. Wenn das Cloneable-Interface nicht implementiert ist, wirft die Funktion clone()
eine CloneNotSupportedException
.
Die Funktion clone()
macht eine zusätzliche Verarbeitung beim Erstellen einer exakten Kopie eines Objekts überflüssig. Wenn wir es mit new
machen, dauert die Verarbeitung lange, deshalb verwenden wir stattdessen das Klonen von Objekten. Wir werden es verwenden, um eine tiefe Kopie zu erstellen.
Wenn ein Element zusammen mit den Objekten, auf die es verweist, dupliziert wird, wird dies als tiefe Kopie bezeichnet. Alle in der Kopie vorgenommenen Änderungen spiegeln nicht das Original wider.
Beispielsweise,
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);
}
}
Ausgabe:
Original 10
12
Deep Copy 10
12
Copy after modifying original
10
Im obigen Beispiel werden am Original vorgenommene Änderungen nicht in der Tiefenkopie widergespiegelt.
Verwenden Sie einen Kopierkonstruktor, um ein Objekt in Java zu klonen
Ein Konstruktor initialisiert ein Objekt einer Klasse. Der Kopierkonstruktor kann ein dupliziertes Objekt einer Klasse erstellen.
Sehen Sie sich den folgenden Code an, um zu sehen, wie eine solche Klasse initialisiert wird.
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);
}
}
Ausgabe:
abc
Dies würde in Java kein tiefes Klonen erreichen.