Es ist etwas schwierig, eine tiefe Objektkopierfunktion zu implementieren. Wie stellen Sie sicher, dass das Originalobjekt und das geklonte Objekt keine gemeinsame Referenz haben?
Antworten
Zu viele Anzeigen?Sie können eine Bibliothek benutzen die eine einfache API hat und relativ schnelles Klonen mit Reflection durchführt (sollte schneller sein als Serialisierungsmethoden).
Cloner cloner = new Cloner();
MyClass clone = cloner.deepClone(o);
// clone is a deep-clone of o
Für komplizierte Objekte und wenn die Leistung nicht wichtig ist, verwende ich eine json-Bibliothek, wie gson um das Objekt in Json-Text zu serialisieren und dann den Text zu deserialisieren, um ein neues Objekt zu erhalten.
gson, das auf Reflexion basiert, funktioniert in den meisten Fällen, außer wenn transient
Felder werden nicht kopiert und Objekte mit zirkulärem Verweis mit Ursache StackOverflowError
.
public static <T> T copy(T anObject, Class<T> classInfo) {
Gson gson = new GsonBuilder().create();
String text = gson.toJson(anObject);
T newObject = gson.fromJson(text, classInfo);
return newObject;
}
public static void main(String[] args) {
String originalObject = "hello";
String copiedObject = copy(originalObject, String.class);
}