Ich frage mich, ob es eine empfohlene Methode gibt, um Deep Instance in Java zu klonen / zu kopieren.
Ich habe 3 Lösungen im Sinn, aber ich kann einige verpassen, und ich würde gerne Ihre Meinung haben
Bearbeiten: Bohzo-Vorschlag einschließen und Frage verfeinern: Es geht mehr um tiefes Klonen als um flaches Klonen.
Mach es selbst:
Codieren Sie die Eigenschaften des Klons von Hand nach den Eigenschaften und überprüfen Sie, ob auch veränderbare Instanzen geklont werden.
pro:
- Kontrolle darüber, was ausgeführt wird
- schnelle Ausführung
Nachteile:
- mühsam zu schreiben und zu warten
- fehleranfällig (Fehler beim Kopieren / Einfügen, fehlende Eigenschaft, neu zugewiesene veränderbare Eigenschaft)
Verwenden Sie Reflexion:
Mit Ihren eigenen Reflexionswerkzeugen oder mit einem externen Helfer (wie Jakarta Common-Beans) ist es einfach, eine generische Kopiermethode zu schreiben, die die Arbeit in einer Zeile erledigt.
Pro:
- Einfach zu schreiben
- Keine Wartungsprobleme
:
- Weniger Kontrolle darüber, was passiert
- Fehler bei veränderlichen Objekten, wenn das Reflection-Tool nicht auch Unterobjekte klont
- Langsamere Ausführung
Verwenden Sie das Klon-Framework:
Verwenden Sie ein Framework, das dies für Sie erledigt, z. B .:
Commons-lang SerializationUtils
Java Deep Cloning Library
Dozer
Kryo
pro:
- genau wie Reflexion
- mehr Kontrolle darüber, was genau geklont werden soll.
Nachteile:
- Jede veränderbare Instanz wird auch am Ende der Hierarchie vollständig geklont. Die
Ausführung kann sehr langsam sein
Verwenden Sie die Bytecode-Instrumentierung, um zur Laufzeit einen Klon zu schreiben
javassit , BCEL oder cglib können verwendet werden, um einen dedizierten Kloner so schnell wie eine geschriebene Hand zu generieren. Kennt jemand eine Bibliothek, die eines dieser Tools für diesen Zweck verwendet?
Was habe ich hier vermisst?
Welches würdest du empfehlen?
Vielen Dank.