Problem mit Referenzen beim Serialisieren

d3rbastl3r

Bekanntes Mitglied
Hallo,

Zum Problem:
(um das mal an einem kleinen Beispiel zu veranschaulichen)

Java:
class Schrank implements Serializable{
    private ArrayList<Schuhe> schuhe;

    public Schrank(){
        this.schuhe = new ArrayList<Schuhe>();
    }

    public void schuheHinzufügen(Schuhe schuhe){
        this.schuhe.add(schuhe);
    }

    public ArrayList<Schuhe> getSchuhe(){
        return this.schuhe;
    }
}

class Person implements Serializable{
    private Schuhe schuheAngezogen;

    public void schuheAnziehen(Schuhe schuhe){
        this.schuhe = schuhe;
    }
}

class Schuhe implements Serializable{
}

public static void main(){
    Schrank schrank = new Schrank();
    Person person = new Person();

    for(inti=0; i<10; ++i){
        schrank.schuheHinzufügen(new Schuhe());
    }

    person.schuheAnziehen(schrank.getSchuhe.get(3));
        
}
Im Schrank befinden sich 10Paar Schuhe ... das 4Paar wird angezogen (diese soll jetzt aber nicht aus dem Schrank rausgenommen werden xD)

Jetzt serialisiere ich Person und Schrank separat dann deserialisiere ich zuerst den Schrank dann die Person. Im schrank sind immer noch 10paar schuhe und die person hat immer noch ein paar an. Leider sind nun nach dem deserialisieren das angezogene paar und das aus dem schrank nicht mehr gleich. (die referenzen stimmen nicht mehr überein)

Gibt es eine Möglichkeit dass nach dem deserialisieren die Referenzen wieder auf das eine und das selbe Objekt gesetzt werden ??
 
wenn es in einer Datei steht, dann geht das schon,
ansonsten kannst du auf einzigartige Objekte setzen (z.B. Enums) oder mit Ids selber zusammensuchen
 
wenn es in einer Datei steht, dann geht das schon,
ansonsten kannst du auf einzigartige Objekte setzen (z.B. Enums) oder mit Ids selber zusammensuchen

zurzeit machen wir das tatsächlich mit Ids ... generieren einfach beim erstellen eines Objektes einen Zeitstempel und suchen uns das beim deserialisieren wieder zusammen.

Ich frage hier deshalb weil ich irgendwie dunkel in Erinnerung habe dass das auch automatisch geht. Habe dazu jedoch nichts gefunden ... vielleicht verwechsle ich da aber auch was.
 

Zurück
Oben