cloneable

___ qstnhdr ___ Vorteile von Java Cloning ___ qstntxt ___

Ich suchte nach Tutorials online über Java-Klonen, fand aber nur die Nachteile zu klonen () und nichts über die Vorteile. Ich würde gerne einige der Vorteile von Java clone () kennenlernen.

    
___ answer41665082 ___

Object.clone () hat viele Design-Probleme, ist aber immer noch die beliebteste und einfachste Art Objekte zu kopieren. Einige Vorteile mit clone () sind

  • Es ist der einfachste Weg, das Klonen zu implementieren, selbst wenn Sie für uralte Projekte nur eine Elternklasse definieren, Cloneable darin implementieren, die Definition der clone () -Methode angeben und jedes Kind Ihrer Eltern bereit ist wird die Klonfunktion bekommen.
  • Klonen erfordert sehr wenig Codezeile, nur eine abstrakte Klasse mit 4 oder 5 Zeilen lang clone () - Methode, wenn Sie keine tiefe Kopie benötigen.
  • Clonen ist der schnellste Weg zum Kopieren von Arrays.
  • Ab Release 1.5 gibt der Aufruf von Klon für ein Array ein Array zurück, dessen Typ für die Kompilierung mit dem des geklonten Arrays identisch ist. Dies bedeutet eindeutig, dass der Aufruf von Klonen für Arrays kein Typ-Casting erfordert.

Sie können mehr über Java Cloning lesen - Konstruktor gegen Klonen kopieren

    
___ answer16329312 ___

Klonen hat seinen Nutzen sicherlich. Stellen Sie sich eine beliebige Art von Geschäftsanwendung vor, in der Sie Datensätze von Daten haben, die in Objekten dargestellt sind und die Sie als "Speichern unter" (Duplizieren und Umbenennen) speichern können. Wenn diese Daten in einem Objekt enthalten sind, das die Cloneable-Schnittstelle implementiert, können Sie das Original klonen und es mit den neuen Informationen aktualisieren.

Dies ist besser als das Erstellen einer neuen Objektinstanz und das explizite Kopieren aller Daten. Einige Leute adressieren dies mit Hilfsklassen und Methoden, die das Kopieren ausführen, aber dann haben Sie die Informationen, die erforderlich sind, um eine Klasse außerhalb der Klasse selbst zu kopieren, was eine schlechte OO-Programmierung ist.

Ein anderer Anwendungsfall, den ich mag, ist, wenn ich eine Klasse als Hintergrundspeicher für eine GUI benutze und diese GUI eine Reset-Schaltfläche hat. Wenn die GUI initialisiert wird, klone ich das Hintergrundspeicherobjekt. Wenn der Benutzer dann auf Zurücksetzen drückt, reinitialisiere ich einfach die GUI auf die Werte im Klonobjekt, anstatt herauszufinden, welche Informationen sie möglicherweise geändert haben, oder eine neue Kopie der ursprünglichen Informationen aus dem Speicher zu erhalten. Es gibt viele Anwendungen, sicherlich.

Aber wie Sie wissen, kann das Klonen Probleme in einem Vererbungs-Framework verursachen und ansonsten leichtgewichtige Datenklassen auffüllen, so dass ich kein Objekt klonbar machen würde, solange es keine Geschäftsanforderungen dafür gäbe.

    
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ tag123klonierbar ___ hilf uns dieses Wiki zu bearbeiten ___ answer16330322 ___

Ich denke, der Grund, warum Sie Probleme haben, etwas über die Vorteile des Klonens zu finden, ist, dass der Vorteil implizit ist: eine (angeblich) einfache Möglichkeit zu haben, ein exaktes Duplikat des ursprünglichen Objekts zu erstellen.

Aber leider hat Javas eingebauter Klonierungsmechanismus über clone () und Cloneable zu viele Nachteile zu berücksichtigen, hauptsächlich in Bezug auf die schrecklichen Auswirkungen, die es auf das Design Ihrer Klassen hat. Josh Bloch hat einen ganzen Abschnitt darüber, warum du clone () oder Cloneable nicht in seinem Buch Effektives Java verwenden solltest, das kurz in Interview .

Die allgemeine Empfehlung lautet, einen Kopierkonstruktor anstelle von clone () oder Cloneable zu verwenden, obwohl Sie immer noch entscheiden müssen, ob eine seichte oder tiefe Kopie geeignet ist. Sie können auch eine Serialisierungs-API wie Serializable oder JAXB sowie verschiedene Klon-Bibliotheken verwenden, um einen tiefen Klon zu erstellen. Sie können eine sehr nette Diskussion in einer verwandten Frage finden, Java: empfohlene Lösung für das tiefe Klonen / Kopieren einer Instanz .

    
___
3
Antworten

Wie kopiere ich eine Warteschlange in Java?

Ich habe eine Queue q1 und möchte ein Queue q2 erstellen, das identisch mit Queue q1 ist. Wie das geht, da die Warteschlange Cloneable nicht implementiert.     
10.04.2014, 08:03
6
Antworten

Warum ist die Methode clone () nur für Klassen verfügbar, die die Cloneable-Schnittstelle implementieren? [Duplikat]

Ich weiß, dass clone() eine geschützte Methode ist, aber "protected" bedeutet, dass sie für alle Unterklassen einer bestimmten Klasse zugänglich ist. Jede Java-Klasse ist eine Unterklasse von Object . Was ist der Grund für die geschütz...
14.08.2013, 18:58
3
Antworten

Vorteile von Java Cloning

Ich suchte nach Tutorials online über Java-Klonen, fand aber nur die Nachteile zu klonen () und nichts über die Vorteile. Ich würde gerne einige der Vorteile von Java clone () kennenlernen.     
02.05.2013, 01:57