Wie viele Arten von Klonen eines Objekts in java?
Wie viele Arten von Klonen eines Objekts in java?
- prüfen zu akzeptieren, mehr Antworten zu bekommen bessere Antworten 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie viele Arten von Klonen eines Objekts in java?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zwei Arten des Klonens
Lesen Bozho Antwort
java-empfohlen-Lösung-für-deep-cloning-kopieren-eine-Instanz
Einige Interessante Thema auf schneller Tiefe Kopien
Flachen Klonen
Tiefes Klonen.
, wie viele Möglichkeiten zum erstellen von Objekten.
Flache Kopie
In der Regel clone-Methode von einem Objekt erzeugt eine neue Instanz der gleichen Klasse und kopiert alle Felder der neuen Instanz und gibt diese zurück. Das ist nichts als flache Kopie. Objekt-Klasse verfügt über eine clone-Methode und bietet Unterstützung bei der flachen Kopie. Es gibt 'Objekt' als Typ und Sie müssen explizit umgewandelt zurück zu Ihrem ursprünglichen Objekt.
Da die Object-Klasse hat die clone-Methode (protected), kann es nicht in all Ihren Klassen. Die Klasse, die Sie wollen, um geklont werden, sollten die clone-Methode implementieren und überschreiben Sie ihn. Sie soll es ermöglichen, seine eigene Bedeutung für die Kopie oder das zumindest sollte aufrufen die super.clone(). Auch Sie haben die Cloneable implementieren marker-interface oder anderes erhalten Sie CloneNotSupportedException. Beim aufrufen des super.clone () - dann sind Sie abhängig von der Object-Klasse ist die Umsetzung und was Sie bekommen, ist eine flache Kopie.
Tiefe Kopie
Wenn Sie eine Tiefe Kopie, dann müssen Sie es selbst implementieren. Wenn das kopierte Objekt enthält ein anderes Objekt seine Referenzen kopiert rekursiv in Tiefe Kopie. Wenn Sie implementieren Tiefe Kopie seien Sie vorsichtig, wie Sie fallen könnte, für zyklische Abhängigkeiten. Wenn Sie nicht wollen, zu implementieren Tiefe Kopie selbst dann können Sie gehen für die Serialisierung. Es tut implementiert Tiefe Kopie implizit und anmutig Umgang mit zyklischen Abhängigkeiten.
Ein weitere Nachteil bei diesem system Klonen ist, dass die meisten der interface /abstrakte Klasse, die Autoren bei java vergessen zu setzen, eine öffentliche clone-Methode. Zum Beispiel können Sie Liste. Also, wenn Sie möchten, zu Klonen, deren Umsetzung Sie zu ignorieren, den abstrakten Typ und verwenden Sie eine aktuelle Implementierungen wie ArrayList mit Namen. Dieses komplett entfernt, der Vorteil und der Güte der Abstraktheit.
Beim implementieren eines singleton-Muster, wenn Ihre Oberklasse implementiert eine öffentliche clone () - Methode, um zu verhindern, dass die Unterklasse von der Verwendung dieser Klasse die clone () - Methode zum abrufen einer Kopie überschreiben, es und werfen eine Ausnahme des Typs CloneNotSupportedException.
Beachten Sie, dass die clone ist nicht für die Instanziierung und Initialisierung. Es sollten nicht Synonym verwendet, wie das erstellen eines neuen Objekts. Da der Konstruktor der geklonten Objekte kann nie get aufgerufen, in den Prozess. Es ist über das kopieren das Objekt in die Diskussion und nicht die Schaffung neuer. Es hängt ganz von der clone-Implementierung. Ein weitere Nachteil (was ist zu tun, es gibt so viele), Klon verhindert, dass die Nutzung von final-Feldern. Wir haben zu finden Umwegen zum kopieren der letzten Felder, in die Sie das kopierte Objekt.
Klon ist eine Vereinbarung zwischen Ihnen, compiler und Durchführung. Wenn Sie sicher sind, dass Sie alle drei haben gute Kenntnisse in java, dann gehen Sie vor und verwenden Sie Klonen. Wenn Sie eine geringste Zweifel besser kopieren Sie das Objekt manuell.
Eine Möglichkeit ist die Implementierung von Cloneable.
Oder Sie können gehen, für deepCopy oder shalowCopy je nach Ihrer Anforderung.
Die "offensichtliche" Antwort, angeregt durch deine Frage wäre die Umsetzung der
Cloneable
interface und überschreibenObject.clone()
. Allerdings diese API ist veraltet und kaputt, so sollte nicht verwendet werden in neuem code.Wahrscheinlich die beste - die meisten "mainstream", also am einfachsten zu verstehen und zu verwenden - Möglichkeit wäre die Umsetzung einer copy-Konstruktor.
Natürlich kann man implementieren, die eine völlig custom - statisch oder nicht-statisch - cloning-Methode, unter welcher Bezeichnung (en)bevorzugt er, mit Tiefe oder flache Kopie. Nur ist dies viel weniger idiomatischen, daher schwerer zu erlernen und zu verwenden, so ist es nicht zu empfehlen.