Tiefen klon von Objectarray- wie klonen?

Myar

Mitglied
Hallöchen!

Ich habe ein Object Array einem Konstruktor übergeben:

Code:
public MyTableModel2(Object[] daten)

In diesem Array sind nochmals fünf ArrayLists.

Nun will ich, um später Veränderungen abgleichen zu können, dieses Array so klonen, dass auch die beinhalteten ArrayLists geklont werden.
Ich brauche später zwei verschiedene Versionen...

Habe es mal so versucht:

Code:
 private Object[] datenalt;
    
    /**
     * Default Konstruktor 
     */
    public MyTableModel2() {
    }

    /** 
     * Hier die Daten an die Instanz des Tablemodels übergeben
     */
    public MyTableModel2(Object[] daten) {
        Object[] obj1 = daten;
        this.datenalt = (Object[]) obj1.clone();
//etc.

Und dann noch die Methode Clone() (vorher implementiert die Klasse myTableModel2 natürlich "Cloneable")

Code:
@Override
    public Object[] clone(){
        try{
            return (Object[]) super.clone();
        }catch( CloneNotSupportedException e ){
            return null;
        }
    }

Nun komme ich nicht weiter.
Wenn ich später rumeditiere und dann zwei Object Arrays an eine andere Klasse übergebe:

Code:
new speichern(result, datenalt);

Wobei "result" die überschriebenen Daten enthält, und ich dann diese mit den vorher geklonten Daten aus "datenalt" vergleichen will.

Wo es hakt, ist das Klonen der darin befindlichen Arrays... Also ich brauche eine tiefe Kopie, nicht zwei Referenzen die auf die selben eingebetteten Objekte zeigen...

Bitte Hilfe :/

Gruß
Myar
 
Erstelle ein neues Array gleicher größe, iterierer über das Array, ruf auf jedem Element des alten Arrays an der selben Position clone auf und pack das Ergebnis in das neue Array.

Möchtest du auch die Elemente deiner ArrayList klonen, müßtest du darüber wiederum ebenfalls iterieren.

Das das nicht mehr so richtig überschaubar ist, wäre es wohl am Besten dir eigene Zwischenklassen zu erstellen, bei denen du eine Methode deepClone anbietest.
 
Hallöchen!

Danke für die Antworten!

Habe es mit einer DeepClone Methode gelöst, die ich ins TableModel eingebaut habe.
Danke für die Tips!

Gruß
Myar
 
Zurück