Was müssen Sie tun ist, zuerst die List<Shape>
serialisiert und dann deserialisieren und eine neue Instanz von Drawing
mit dem deserialisiert List
public static Drawing deepClone(Drawing drawing) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(drawing.shapes); //Serializes the drawing.shapes
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
return new Drawing((LinkedList<Shape>)ois.readObject()); //Deserializing and reading
} catch (IOException e) {
return null;
} catch (ClassNotFoundException e) {
return null;
}
}
zurückkehren Angenommen, Sie einen Konstruktor in Zeichnung haben, die in nimmt a LinkedList<Shape>
als Parameter
EDIT
Sie werden nicht clone()
in Shape-Klasse hinzufügen müssen, wie Sie clone()
Methode überschreiben, wenn Sie den Cloneable
-Schnittstelle implementieren, sondern nach der Frage, sie wollen Sie Klonen mit Serializable
Schnittstelle erstellen.
Die Tatsache, dass Shape Serializable implementiert, ist ein Hinweis. Der Interviewer hat wahrscheinlich einfach erwartet, dass Sie die Liste serialisieren und deserialisieren und eine neue Drawing-Instanz erstellen, die auf die deserialisierte Liste verweist. –
@JBNizet andererseits, wenn Shape transiente Felder hat, gehen sie während der Serialisierung verloren, gehen aber nicht verloren, wenn Objekte geklont werden. – AdamSkywalker
prüfen, ob dies hilft http://stackoverflow.com/questions/64036/how-do-you-make-a-deep-copy-of-an-object-in-java – Ravi