Die Klonmethode und die klonbare Schnittstelle – 1

„Hallo, Amigo!“

„Hallo, Kim.“

„Ich werde Ihnen etwas über die clone()-Methode erzählen.“

„Der Sinn dieser Methode besteht darin, ein Objekt zu klonen, oder mit anderen Worten, einen Klon/eine Kopie/ein Duplikat des Objekts zu erstellen.“

„Wenn diese Methode aufgerufen wird, erstellt die Java Virtual Machine ein Duplikat des Objekts, für das sie aufgerufen wird, und gibt es zurück.

Die Implementierung der Klonmethode durch die Object-Klasse ist sehr primitiv: Es wird nur ein neues Objekt erstellt, und die Werte der Felder des ursprünglichen Objekts werden seinen Feldern zugewiesen.

Wenn das kopierte Objekt Verweise auf andere Objekte enthält, werden diese Verweise kopiert. Es werden keine Duplikate dieser Objekte erstellt.“

„Hmm. Da gibt es nicht viel zu sagen.“

„Die Sache ist, dass die Java Virtual Machine nicht weiß, welche Objekte geklont werden können und welche nicht. Dateien können beispielsweise nicht geklont werden. Das Gleiche gilt für einen System.in-Stream.“

„Also wurde die Frage des vollständigen Klonens den Entwicklern einer Klasse vorgelegt.“ Das ist alles ähnlich wie die Handhabung der Methode „equals“. Es gibt sogar etwas, das mit hashCode vergleichbar ist: die Cloneable-Schnittstelle.“

„Die Cloneable- Schnittstelle ist eine sogenannte ‚Marker-Schnittstelle‘: Sie verfügt über keine Methoden und wird zum Markieren bestimmter Klassen verwendet.

„Wenn der Entwickler einer Klasse glaubt, dass Objekte der Klasse geklont werden können, markiert er sie mit dieser Schnittstelle (dh macht die Klasse klonbar).“

„Wenn dem Entwickler die Standardimplementierung der Klonmethode nicht gefällt, muss er eine eigene schreiben, die ein Duplikatobjekt auf die richtige Weise erstellt.“

„Wenn Sie die clone ()-Methode aufrufen, prüft Java, ob das Objekt die Cloneable-Schnittstelle unterstützt. Wenn dies der Fall ist, klont es das Objekt mithilfe der clone ()-Methode. Wenn nicht, löst es eine CloneNotSupportedException aus.“

„Mit anderen Worten, wir müssen entweder die Klonmethode überschreiben oder die Klasse klonbar machen?“

„Ja, aber Sie müssen die Methode trotzdem überschreiben. Die clone()-Methode ist als geschützt deklariert, sodass sie nur von Klassen in ihrem Paket (java.lang.*) oder deren Unterklassen aufgerufen werden kann.“

„Ich bin etwas verwirrt – was muss ich also tun, um ein Objekt zu klonen?“

„Wenn Sie die „Standard“-Klonmethode der Object-Klasse verwenden möchten, müssen Sie Folgendes tun:

a) Fügen Sie Ihrer Klasse die klonbare Schnittstelle hinzu“

b) Überschreiben Sie die Klonmethode und rufen Sie die Implementierung der Superklasse in Ihrer Implementierung auf:“

class Point implements Cloneable
{
 int x;
 int y;

 public Object clone()
 {
  return super.clone();
 }
    }

„Oder Sie können eine Implementierung der Klonmethode vollständig selbst schreiben:“

class Point
{
 int x;
 int y;

 public Object clone()
 {
  Point point = new Point();
  point.x = this.x;
  point.y = this.y;
  return point;
 }
}

„Das ist eine interessante Methode. Ich bin sicher, dass ich sie anwenden werde. Gelegentlich…“