Vorteile von Java Cloning

8

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.

    
user2273278 02.05.2013, 01:57
quelle

3 Antworten

10

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.

    
CBass 02.05.2013, 02:15
quelle
3

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 .

    
rob 02.05.2013 04:25
quelle
0

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

    
Naresh Joshi 15.01.2017 19:00
quelle

Tags und Links