ich hab nen bisschen hier im Forum geschaut und hab 2 Methoden zum Klonen von Objekten gefunden,...
so wie ich das sehe, ist Cloneable eine flache Kopie und das zweite eine tiefe Kopie?
gibt es da sonst noch irgendwelche Probleme/Unterschiede, die man beachten sollte? (außer, dass die Interfaces nicht implementiert sind)
so wie ich das sehe, ist Cloneable eine flache Kopie und das zweite eine tiefe Kopie?
gibt es da sonst noch irgendwelche Probleme/Unterschiede, die man beachten sollte? (außer, dass die Interfaces nicht implementiert sind)
Java:
public class Clonetest implements Cloneable,Serializable{
private JLabel lbl;
private int zahl;
public static void main(String[] args){
Clonetest ct=new Clonetest();
ct.lbl=new JLabel("test");
ct.zahl=5;
Clonetest ct1=ct.clone();
ct1.zahl=6;
ct1.lbl.setText("Test2");
System.out.println(ct1.lbl.getText());
System.out.println(ct.lbl.getText());
System.out.println(ct1.zahl);
System.out.println(ct.zahl);
System.out.println("---------");
Clonetest ct2=Clonetest.clone2(ct);
ct2.zahl=7;
System.out.println(ct2.zahl);
System.out.println(ct.zahl);
ct2.lbl.setText("Test3");
System.out.println(ct2.lbl.getText());
System.out.println(ct.lbl.getText());
}
public Clonetest clone() {
try {
return (Clonetest) super.clone();
} catch (CloneNotSupportedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return null;
}
public static Clonetest clone2(Clonetest copyObject){
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(copyObject);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
Clonetest deepCopy = (Clonetest) ois.readObject();
return deepCopy;
} catch (IOException e) {
e.printStackTrace();
} catch(ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}