clonen -tiefe Kopie

Status
Nicht offen für weitere Antworten.

---

Aktives Mitglied
Hallo,

es gibt zwar ähnliches im Netz, verstehs aber leider nicht.
Ich möchte eine tiefe Kopie (Objekte, die hinter den Verweisen stehen kopieren) , was mache ich fasch?

Code:
public class MapTableModel extends AbstractTableModel implements  Cloneable 
{

    public Object clone() 
    {
		 
        Object theClone = super.clone();	 
        theClone.clear(); //eclipse 
        for (Object o:this) //hier 
        theClone.add(o.clone());
        return theClone;
    }
..
}
schon mal vielen Dank!!
 
was heißt denn
//eclipse
und
//hier
?

theClone ist vom Typ Object, zumindest die Variable, wie willst du dann add() aufrufen?
mit solchen Versuchen klingt das eindeutig zu schwierig,
da baue lieber erstmal einen normalen Konstruktor, der die Daten kopiert,

eine vollständige Kopie ist am einfachsten mit
http://www.informatik-student.de/2006/12/10/deep-copy-von-java-objekten/
zu erreichen, aber bei einem TableModel strengstens nicht zu empfehlen,

im AbstractTableModel könnten Listener enthalten sein, vielleicht gar eine Referenz auf die JTable, auf das ganze JFrame usw.,
alles ganz schrecklich
 
Danke, ich schaus mir Moregn in Ruhe an..
in //eclipse und //hier wollte ich die Vorschläge/err von eclipse reinkopieren
?
 
Also das TableModel zu clonen war wohl total falsch.
Ich lese aus einem file in eine map und möchte die eingelesenen Daten kopieren. So dass ich die Kopie verändere das Original aber nicht. Muss ich dann die Properties clonen und die Daten einzeln einlesen?
Das funktioniert bei mir leider nicht. Ist die Vorgehensweise richtig?

//Erzeugen orig Wortliste
Code:
private void setWordList(Properties wl)
    {
        if(!getWordList().equals(wl))
        {
            getWordList().clear();
            getWordList().putAll(wl);
            getTableModel().refresh();
        }
}

Code:
    file = fc.getSelectedFile();
        try
        {
            InputStream in = new BufferedInputStream(new FileInputStream(file));
            Properties newWl = new Properties();
            newWl.load(in);
            in.close();
            setWordList(newWl);
        }
        catch(IOException ex)
        {
            handleException(ex);
        }
//clonen
Code:
Properties aktWl = newWl.clone()
 
> Das funktioniert bei mir leider nicht. Ist die Vorgehensweise richtig?

die Vorgehensweise in diesem Posting schonmal nicht 😉 , WAS geht nicht?

ich persönlich bin zu clone() kein Experte, meine Devise: ausprobieren, zufrieden sein oder nicht,
sicher kann man sich bei unbekannten Methoden eh nie sein,

oben habe ich einen Link zur Serialisierung gepostet, das kann fast gar nicht schiefgehen,
auf eine Map-Datenstruktur nicht schlecht, bei Properties evtl. auch denkbar
 
Ich lese jetzt einfach Daten aus alten Properties und speichere dann ins Neue:
@SlaterB: Danke für den Link zu Deiner Website, das clonen kann ich bestimmt noch brauchen.
Hier war mein Problem, wie ich an die Daten aus MapTableModel komme.

Code:
sourceWl = new Properties();
    	 try {
    		 wUI2.getWordList().store(new      
                   FileOutputStream("out"),"out");
         } catch (IOException e) {
             e.printStackTrace();
         }
         try {
        	 sourceWl.load(new FileInputStream("out"));
         } catch (FileNotFoundException ex) {
        	 ex.printStackTrace();
         } catch (IOException ex) {
             ex.printStackTrace();
         }
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben