Ich arbeite gerade an einer Graphen-Bibliothek für Java. Wie Sie erwarten, gibt es eine Vertex
Klasse. Diese Klasse enthält ein Objekt vom Typ VertexData<T>
und kann selbst alles enthalten.
(Ich weiß, das könnte redundant sein und ich könnte einfach Vertex<T>
tun, aber für den Zweck der Frage ist es egal).
Ich habe VertexData<T>
Cloneable
implementieren und eine public VertexData<T> clone()
Methode haben eine tiefe Kopie von Serialisierung und Deserialisierung die anruf Object
, ziemlich genau wie beschrieben Rückkehr hereWird seichte Kopie wirklich benötigt?
Nun ist die Frage, da ich eine Methode tiefe Kopie zu tun haben, macht es Sinn, auch eine flache Kopie zu haben? Wenn ja, was wäre ein Fall, in dem eine flache Kopie gegenüber einer tiefen Kopie vorzuziehen wäre?
UPDATE: Da die meisten der Antworten und Kommentare einige Erklärungen enthalten, was eine oberflächliche Kopie in der einen oder anderen Weise ist, fühle ich mich so, dass ich ein wenig verdeutlichen muss. Ich weiß, was eine flache Kopie ist, wie es funktioniert, alles. Meine Frage ist, dass, da es eine Bibliothek ist, die ich entwickle, und da ich eine tiefe Kopiermethode erstellt habe, macht es Sinn, auch eine Methode für flache Kopie zur Verfügung zu stellen?
Ich werde auch hier hinzufügen, dass es keine primitiven Typen in VertexData<T>
Klasse enthalten sind.
Also im Kontext einer Container-Klasse zum Speichern von Vertex-Daten für ein Diagramm Bibliothek, wird eine flache Kopie jemals benötigt werden?
Wenn ja, können Sie sich ein Beispiel vorstellen, im Kontext dessen, was ich entwickle?
Wenn nicht sollte ich eine seichte Kopiermethode nur der Vollständigkeit halber hinzufügen?
Ist das eine gute Übung oder spielt es keine Rolle?
Flache Kopien sind nützlich, wenn Sie Kopien von Klassen erstellen möchten, die eine große zugrunde liegende Datenstruktur oder einen Datensatz gemeinsam haben.Wenn Sie zum Beispiel mehrere "Client" -Klassen haben, die alle einen Verweis auf eine große Datenstrukturreferenz haben, würde eine tiefe Kopie versuchen, eine Kopie der zugrunde liegenden Daten zu erstellen, wenn Sie eine Kopie des Clients erstellen möchten , was nicht unbedingt das ist, was du willst. –
Es ist situationsbedingt. Flaches Kopieren bedeutet im Allgemeinen, dass nur eine Ebene eines Objekts kopiert wird, während tiefes Kopieren im Allgemeinen bedeutet, dass alles auf mehreren Ebenen kopiert wird. – Adam
Normalerweise erstellen Sie flache Kopien, wenn Sie unveränderliche Objekte referenzieren, aber das ist nur ein Beispiel, keine Regel. – biziclop