Kopieren Sie ein Objekt in Java
Ich habe ein Objekt, das brauche ich zum kopieren in Java. Muss ich eine Kopie erstellen, und führen Sie einige tests auf Sie, ohne änderung der ursprünglichen Objekts selbst.
Bin ich davon ausgegangen, dass ich brauchte, um die clone () - Methode, aber diese ist geschützt. Nachdem Sie es getan haben einige der Forschung auf dem Netz, ich kann sehen, dass diese überschrieben werden können, mit einer öffentlichen Methode in meiner Klasse. Aber ich kann nicht finden eine Erklärung, wie dies zu tun. Wie konnte dies getan werden?
Außerdem ist dies der beste Weg, das zu erreichen, was ich brauche?
InformationsquelleAutor der Frage Tray | 2009-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Andere Möglichkeit per Copy-Konstruktor (aus Java Practices):
InformationsquelleAutor der Antwort ecleel
Gibt es zwei populäre Ansätze. Man ist um eine
clone
- Methode, wie Sie erwähnt, wie so.Achten Sie auf die "Felder kopieren ... hier!" Teil. Die ersten
result
ist nur eine flache Kopie, was bedeutet, dass, wenn es eine Referenz auf ein Objekt, sowohl das original als auchresult
teilen das gleiche Objekt. Zum Beispiel, wennC
enthältprivate int[] data
würden Sie wahrscheinlich wollen zu kopieren.Beachten Sie, dass Sie brauchen nicht zu kopieren primitive Felder, deren Inhalt bereits kopiert, oder unveränderliche Objekte, wie Sie können nicht ändern, sowieso.
Der zweite Ansatz ist die Bereitstellung eines copy-Konstruktors.
Oder eine Kopie Fabrik.
Beide Ansätze haben Ihre jeweiligen Eigenschaften.
clone
ist schön, weil seine Methode, so dass Sie nicht haben, um zu wissen, die genaue Art. Am Ende sollten Sie immer am Ende mit einem "perfekt" zu kopieren. Der copy Konstruktor ist schön, weil die Anrufer die chance hat, zu entscheiden, wie gesehen werden kann, die Java-Sammlungen.Ich empfehle die Wahl entweder Ansatz, je nachdem, was Ihnen besser passt.
Ich würde verwenden andere Ansätze, wie reflektierende kopieren oder unmittelbaren serialisieren/Deserialisieren, in unit-tests nur. Zu mir, fühlen Sie sich weniger geeignet für die Produktion von code, vor allem wegen der Leistung betrifft.
InformationsquelleAutor der Antwort Ronald Blaschke
Einige Optionen:
Cloneable
für Ihr Objekt und setzenclone()
Methode als public. Finden Sie die vollständige Erklärung hier: http://www.cafeaulait.org/course/week4/46.htmlJedoch, dies erzeugt eine flache Kopie und könnte nicht etwas, was Sie wollen.
Serializable
- Schnittstelle für das Objekt und alle seine Felder.XStream
durchführen Serialisierung über XML -, die Sie nicht umsetzen müssen hier nichts.InformationsquelleAutor der Antwort Yoni Roit
Für test-code, Serialisierung ist vielleicht die sicherste Antwort, vor allem, wenn das Objekt bereits Serialisierbar versuchen, Apache Commons SerializationUtils für eine Implementierung.
InformationsquelleAutor der Antwort Gareth Davis
Können Sie verwenden, org.apache.Unterhaus.lang3.SerializationUtils Klasse für das Objekt Klonen,
- Klasse sollte von der Klasse implementiert Serializable interface.
SerializationUtils.Klon ist auch auf Google App Engine-Instanz
InformationsquelleAutor der Antwort A.G
Gibt es mehrere Möglichkeiten zum kopieren Objekt in java(flach oder tief).
Diese Antwort wird Ihnen helfen.
InformationsquelleAutor der Antwort Chandra Sekhar
Joshua Bloch hat einige interessante Dinge zu sagen über cloneable. Abhängig von der Größe/Konstruktion des Objektes, ich möchte hinzufügen, eine Kopie-Konstruktor auf das Objekt, oder serialise/deserialise mit einer der Lösungen erwähnt.
InformationsquelleAutor der Antwort Brian Agnew