Ich brauche meine Klasse mit polymorphen Klonen (tiefe Kopie) auszustatten, also brauche ich so etwas zu arbeiten:Ist die Java clone() -Methode der einzige Weg, polymorphes Klonen zu erreichen?
SuperType original = new SubType();
SuperType copy = original.clone();
wo original.clone()
kann durch einen beliebigen Mechanismus ersetzt werden, um eine tiefe Kopie zu erstellen, und der tatsächliche Typ von copy
soll SubType
sein, denn original
ist auch eine SubType
.
Ist die clone()
Methode und Cloneable
Schnittstelle die einzige Möglichkeit, dies zu erreichen? Factory-Methoden und Kopierkonstruktoren können nicht verwendet werden, da die eigentliche Klasse nur zur Laufzeit bekannt ist, oder? Gibt es andere vorgeschlagene Methoden außer diese Serialisierung-Deserialisierung Ansätze, und die Java deep-cloning library, die IMHO ist noch schlimmer schwarze Magie als die clone()
Methode?
Danke, Petr
Sie können keinen Konstruktor erstellen, an den das Objekt, an das geklont werden soll, übergeben werden kann? – Justin
@gangqinlaohu Sicher, ich kann, aber dann würde ich 'neue SubType (original)' nennen, was ich nicht kann, da ich nicht weiß, in der Zeit des Schreibens des Codes, wenn das Original tatsächlich der Klasse 'SubType' oder' SubType2' ist oder "SubSubType". – Posa