Java gibt eine Kopie zurück, um zukünftige Änderungen auszublenden
Frage
Angenommen, Sie haben in Java eine Klasse, die ein umschließt ArrayList
(oder eine beliebige Sammlung) von Objekten.
Wie würden Sie eines dieser Objekte zurückgeben, sodass der Aufrufer keine zukünftigen Änderungen an dem in der ArrayList vorgenommenen Objekt sieht?
d.h.Sie möchten eine tiefe Kopie des Objekts zurückgeben, wissen aber nicht, ob es klonbar ist.
Lösung
Machen Sie daraus eine Spezifikation:
-Diese Objekte müssen eine Schnittstelle implementieren, um in die Sammlung so etwas wie möglich zu sein ArrayList<ICloneable>()
Dann können Sie sicher sein, dass Sie immer eine tiefe Kopie erstellen – die Schnittstelle sollte über eine Methode verfügen, die garantiert eine tiefe Kopie zurückgibt.
Ich denke, das ist das Beste, was Sie tun können.
Andere Tipps
Eine Möglichkeit ist die Verwendung der Serialisierung.Hier ist ein Blog-Beitrag, der es erklärt:
http://weblogs.java.net/blog/emcmanus/archive/2007/04/cloning_java_ob.html
Ich nehme an, es ist eine offensichtliche Antwort:
Machen Sie eine Voraussetzung dafür, dass die in der Sammlung gespeicherten Klassen klonbar sind.Sie können dies zum Zeitpunkt des Einfügens oder zum Zeitpunkt des Abrufs überprüfen, je nachdem, was sinnvoller ist, und eine Ausnahme auslösen.
Oder wenn das Element nicht klonbar ist, greifen Sie einfach auf die Option „Return by Reference“ zurück.