Objekt vollständig kopieren

Jellysheep

Erfahrenes Mitglied
Hi,
ich habe in einer Klasse ein Verweis auf ein Objekt der selben Klasse, dieses enthält wieder ein solches Objekt etc. und das ganze höchstens zehn mal.
Wie kann ich jetzt das ganze Objekt mit allen Verweisen kopieren, sodass alles doppelt existiert?
Kann ich das rekursiv lösen?
 
Hallo,

es ist ganz praktisch, wenn du das Interface Clonable implementierst und die Methode clone ausprogrammierst.

Da kannst du dann auch die Clone-Methode dieser Klasse aufrufen.

Ich hoffe du verstehst ungefähr wie ich das meine. Falls nicht, kann ich gerne ein Beispiel posten.

Gruß

Sascha
 
Danke, ich hab das auch schon probiert, konnte aber von "außen", also von einer anderen Klasse, nicht auf die clone()-Methode zugreifen. Ich hab es so gelöst:
Java:
public class abc implements Cloneable{
    ...
    public abc copy(){
        try {
            return (abc)clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
            return null;
        }
    }
}
 
Genau, allerdings musst du sie halt auch ausprogrammieren, da du mit super.clone wahrscheinlich die clone-Methode von Object aufrufst.

Gruß

Sascha
 
Und wie mache ich das? Etwa rekursiv zum Beispiel? Ungefähr so:
Java:
public abc copy(){
    abc tmp = new abc();
    tmp.x = x; //in abc enthaltenes Objekt
    if(next == null){
        tmp.next = null;
    }else{
        tmp.next = next.copy(); //Verweis auf nächstes Objekt
    }
    return tmp;
}
Oder kann ich das Objekt in einen "virtuellen" ObjectOutputStream schreiben und wieder einlesen?
 
Schau mal hier
Java:
public class CloneExample implements Cloneable {

    private CloneExample example = new CloneExample();
    private String name;

    @Override
    protected CloneExample clone() throws CloneNotSupportedException {

        CloneExample clone = new CloneExample();
        clone.name = name;
        if (example != null) {
            clone.example = example.clone();
        }
        return clone;
    }
}

Gruß

Sascha
 
Und was ist da jetzt der Unterschied zu meinem Code, abgesehen davon, dass deine Methode clone heißt, dass die Klasse Cloneable implementiert und dass im "null-Fall" nicht null zugewiesen wird? :confused:
Für mich schauen die recht gleich aus. ;)
 
Zurück