Sie müssen Kopien aller Point-Instanzen selbst erstellen ...
Solange Ihre Punktklasse serialisierbar ist, können Sie dieses Array serialisieren + deserialisieren, um eine schnelle, tiefe Kopie zu erhalten
Im Moment habe ich ein Array von Point-Objekten und möchte ein COPY dieses Arrays erstellen.
Ich habe folgende Möglichkeiten versucht:
1) Point[] temp = mypointarray;
2) Point[] temp = (Point[]) mypointarray.clone();
3)
%Vor%Aber alle diese Arten stellen sich heraus, dass nur eine Referenz von mypointarray für temp, nicht für eine Kopie erstellt wird.
Wenn ich zum Beispiel die x-Koordinate von mypointarray [0] auf 1 änderte (der ursprüngliche Wert ist 0), wird die x-Koordinate von temp [0] ebenfalls auf 1 geändert (ich schwöre, ich habe temp nicht berührt) .
Gibt es also Möglichkeiten, eine Kopie des Point-Arrays zu erstellen?
Danke
Sie müssen eine tiefe Kopie erstellen. Es gibt kein integriertes Dienstprogramm dafür, aber es ist einfach genug. Wenn Point
einen Kopierkonstruktor hat, können Sie das folgendermaßen machen:
Dies ermöglicht null Array-Elemente.
Mit Java 8 können Sie dies kompakter mit Streams tun:
%Vor% Und wenn Sie sicher sind, dass kein Element von mypointarray
ist null
, kann es noch kompakter sein, weil Sie den null
test eliminieren und Point::new
verwenden können, anstatt Ihr eigenes Lambda für% co_de zu schreiben %:
Sie müssen Kopien aller Point-Instanzen selbst erstellen ...
Solange Ihre Punktklasse serialisierbar ist, können Sie dieses Array serialisieren + deserialisieren, um eine schnelle, tiefe Kopie zu erhalten