Ich versuche, eine tiefe Kopie eines Objekts, einschließlich einer GregorianCalendar
Instanz zu machen. Ich bin immer vorsichtig, clone()
zu verwenden, und es scheint hier nicht übersteuert worden zu sein, also mache ich nur die Kopie Feld für Feld. Idealerweise würde es eine Copykonstruktor sein, die ich wie so verwenden könnte:Schnellste Möglichkeit, einen Gregorianischen Kalender zu klonen?
GregorianCalendar newCalendar = new GregorianCalendar(oldCalendar);
Leider ein finde ich, kann keine solche Funktionalität in der API und versuchen bin stecken, um herauszufinden, welche Felder wir müssen exakte Kopie. Also, um eine Kopie von einem dieser Kalender zu machen, wie würdest du es tun? Fehle ich hier eine einfache Abkürzung?
ich nicht ganz klar war, warum ich vermeiden 'Klon()'. In diesem Fall folge ich nur dem Rat von Joshua Bloch, defensive Kopien zu machen. Da clone() möglicherweise eine Unterklassen klon() -Methode aufrufen könnte, könnte ich mit einer nicht sauberen Kopie enden. Ein bisschen akademisch in meinem Fall, aber deshalb habe ich es vermieden. – wds
Wie ich schon sagte, die Daten im Kalender sind nicht von diesem Problem betroffen - alle Daten sind primitiv. Und die Klonmethode in "Calendar" funktioniert gut. – Bozho
Sein Punkt ist, dass Sie möglicherweise eine Unterklasse erstellen können, die einen Verweis auf die ursprüngliche Kalenderinstanz behält und diese Referenz herum behält. Wenn beispielsweise alle Setter Werte in der ursprünglichen Instanz anstelle der neuen setzen, wird Ihre "tiefe" Kopie jetzt kompromittiert. – wds