Serialisierung und Referenzen

Siassei

Bekanntes Mitglied
Hallo,

folgendes

Objekt A soll serialisiert werden
Objekt A enthält eine Referenz auf ein Objekt B
mehrere Objekte A können auf das gleiche Objekt B verweisen
es ist nicht ausgeschlossen, dass sich alle Objekte von B unterscheiden

Beim laden müssen alle Referenzen von den Objekten A auf B exakt dem entsprechen, wie vorher.
Mein Problem liegt beim Feststellen, ob die Referenz auf B schon vorhanden ist. Die Objekte können ja gleich sein und somit scheidet equals aus. Eine zusätzliche Variable in B scheidet aus, da die Instanz von B vorher nicht bekannt ist und von einer abstrakten Klasse erben geht auf Grund des Design nicht.

Wie kann ich feststellen, ob eine Referenz eines Objekts bereits in einer Liste ist?
Bietet die Reflection-API hier abhilfe? Erzeugen einer neuen Variable bzw. auslesen einer Eigenschaft, die es ermöglicht eine Unterscheidung zu treffen.

Gruß,
Thomas
 

Sanix

Top Contributor
Vielleicht kannst du ein konkretes Beispiel posten aber Serialisierung macht immer eine deep Copy. Beim Wiederherstellen wirst du alle Objekte wieder habe. Die genaue Referenzadresse wird sich unterscheiden aber die brauchst du bei Java ja eh nicht.
 

Siassei

Bekanntes Mitglied
Beispiel:
Java:
public class A {

    private B b;


    public A(B v) { b = v; }

    public B getB() {
        return b;
    }

    public void setB(B b) {
        this.b = b;
    }
}

public class B {

    private String s;


    public B(String v) { s = v; }

    public String getS() {
        return s;
    }

    public void setS(String s) {
        this.s = s;
    }
}

public class DeepTest {

    /**
     *
     * @param args
     */
    public static void main(String[] args) {
        A a1, a2, a3;
        B b1, b2;

        b1 = new B("B 1");
        b2 = new B("B 2");

        a1 = new A(b1);
        a2 = new A(b2);
        a3 = new A(b2);

        System.out.println("a1: "+ a1.getB().getS());
        System.out.println("a2: "+ a2.getB().getS());
        System.out.println("a3: "+ a3.getB().getS());

        b2.setS("new Value");

        System.out.println("a1: "+ a1.getB().getS());
        System.out.println("a2: "+ a2.getB().getS());
        System.out.println("a3: "+ a3.getB().getS());
    }
}
Das sollte alles erklären. Die Referenzen sind wichtig! und sollten daher nach dem Laden wieder hergestellt werden. Aber wie, wenn es von B - Objekte geben wird, die sich nicht unterscheiden? In C++ würde ich die Referenz-Addresse abfragen. In Java kenne ich da keine Möglichkeiten und zudem könnte der GC das Objekt während des Vorganges verschieben.
 

Siassei

Bekanntes Mitglied
Eine kleine Erweiterung
Java:
public class A {

    private B b;


    public A(B v) { b = v; }

    public B getB() {
        return b;
    }

    public void setB(B b) {
        this.b = b;
    }
}

public class B {

    private String s;


    public B(String v) { s = v; }

    public String getS() {
        return s;
    }

    public void setS(String s) {
        this.s = s;
    }
}

public class DeepTest {

    /**
     *
     * @param args
     */
    public static void main(String[] args) {
        A a1, a2, a3, a4, a5;
        B b1, b2;

        b1 = new B("B 1");
        b2 = new B("B 2");

        a1 = new A(b1);
        a2 = new A(b2);
        a3 = new A(b2);

        a4 = new A(new B("B 2"));
        a5 = new A(new B("B 2"));

        System.out.println("a1: "+ a1.getB().getS());
        System.out.println("a2: "+ a2.getB().getS());
        System.out.println("a3: "+ a3.getB().getS());
        System.out.println("a4: "+ a4.getB().getS());
        System.out.println("a5: "+ a5.getB().getS());

        b2.setS("new Value");

        System.out.println("a1: "+ a1.getB().getS());
        System.out.println("a2: "+ a2.getB().getS());
        System.out.println("a3: "+ a3.getB().getS());
        System.out.println("a4: "+ a4.getB().getS());
        System.out.println("a5: "+ a5.getB().getS());
    }
}
 

Siassei

Bekanntes Mitglied
== vergleicht Objekte auf Identität,
equals() auf Gleichheit

Da habe ich den Wald vor lauter Bäumen nicht mehr gesehen :) Diese Unterscheidung war mir unbekannt. Ich nahm immer an, dass der ==-Operator die equal-Methode aufruft. Zum Glück ist dem nicht so :)

Eine kleine Frage am Rande. Warum steht in vielen Bücher zu Java, dass man die equal-Methode dem == vorziehen soll? Das kann man pauschal nicht sagen! Darauf beruhte meine, Jahre lange (> 3), Annahme.

Für die Nachwelt, der erste Google-Treffer war
JAVA: 10.1.1 Die Klasse java.lang.String
 
S

SlaterB

Gast
nur in solch technischen Fällen wie deinem ist == interessant, ansonsten schaut man je eher nach dem fachlichen Inhalt,
bestes Beispiel ist immer String,
im Programm hat man "Test", der User tippt auch "Test" ein (JTextField), die Objekte sind nicht ==, sondern zwei verschiedene, aber equal


> Ich nahm immer an, dass der ==-Operator die equal-Methode aufruft. Zum Glück ist dem nicht so

sofern nicht anders überschrieben, verwendet aber equals() (aus Klasse Object) ==
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
G (De)serialisierung und Referenzen Allgemeine Java-Themen 5
antonia09 Einkaufszettel Persistenz und Serialisierung Allgemeine Java-Themen 6
D Serialisierung und Deserialisierung von Objekten - Frageprogramm Allgemeine Java-Themen 4
R Datentypen Korrekte integer in Hex ASCII Konvertierung und serialisierung Allgemeine Java-Themen 1
M Serialisierung funktioniert nicht Allgemeine Java-Themen 9
Z Best Practice Serialisierung Allgemeine Java-Themen 2
Arif Input/Output Serialisierung - Datei wird nicht erzeugt Allgemeine Java-Themen 3
M Alternative zur Serialisierung.. Protobuf? Allgemeine Java-Themen 9
E Serialisierung - Deserialisierung Allgemeine Java-Themen 4
Thallius Serialisierung schlägt fehl. Allgemeine Java-Themen 3
M Serialisierung & Verschlüsselung Allgemeine Java-Themen 2
E Serialisierung - Sinn einer generierten serialVersionUID? Allgemeine Java-Themen 4
V Serialisierung von Instanz eigener Klasse Allgemeine Java-Themen 5
A Input/Output Serialisierung und Object.hashCode() Allgemeine Java-Themen 3
K Serialisierung einer verschachtelten Datenstuktur Allgemeine Java-Themen 9
Tobse Input/Output Dateiformat: Serialisierung VS Custom format Allgemeine Java-Themen 6
A Problem bei Serialisierung von Bibliotheks-Klassen Allgemeine Java-Themen 6
A Input/Output Serialisierung Sonderzeichen Allgemeine Java-Themen 3
P Serialisierung der Oberklasse Allgemeine Java-Themen 2
Kr0e Circular reference - Serialisierung Allgemeine Java-Themen 6
K Serialisierung in Properties-Datei möglich? Allgemeine Java-Themen 3
B Serialisierung mit Unterobjekten über Netzwerk Allgemeine Java-Themen 3
C Serialisierung - Standardwert für nachträglich hinzugefügtes Feld Allgemeine Java-Themen 2
S Serialisierung der Kindklasse Allgemeine Java-Themen 5
K Serialisierung komplett selbst machen Allgemeine Java-Themen 13
C Serialisierung ohne Serializable Allgemeine Java-Themen 4
S Viele Bilder -> Speicher ausgelastet? / (De-)serialisierung geht nicht mehr richtig Allgemeine Java-Themen 8
E Objekt bei Serialisierung ändern Allgemeine Java-Themen 2
Q Serialisierung / Speicherung Geschwindingkeit & Aktuelle Position Allgemeine Java-Themen 7
Z Serialisierung und Deserialisierung einer HashMap Allgemeine Java-Themen 17
W Serialisierung Allgemeine Java-Themen 6
K Serialisierung von Hashmap in Vector Allgemeine Java-Themen 3
F Serialisierung und Obfuscation? Allgemeine Java-Themen 7
T Serialisierung: Wie macht RMI das so schnell? Allgemeine Java-Themen 14
J Serialisierung: readInt + writeInt Allgemeine Java-Themen 4
X Einige Fragen zu Serialisierung Allgemeine Java-Themen 2
J bean + serialisierung + serialVersionUID Allgemeine Java-Themen 3
K Serialisierung Allgemeine Java-Themen 6
thE_29 Wie funktioniert Serialisierung? Allgemeine Java-Themen 10
S Problem mit Serialisierung Allgemeine Java-Themen 2
C Serialisierung von JComboBox Allgemeine Java-Themen 4
A Best Practice Wie viele Referenzen machen Sinn? Weniger ist mehr? Allgemeine Java-Themen 1
J Mit Referenzen verkettet Listen. Allgemeine Java-Themen 9
A Referenzen von Bildobjekten löschen Allgemeine Java-Themen 0
kaoZ Best Practice Shared Actions , Referenzen in Gui halten ? Allgemeine Java-Themen 25
K Referenzen finden Allgemeine Java-Themen 6
R Referenzen im Heap anzeigen Allgemeine Java-Themen 3
M Datentypen Referenzen oder seperate IDs vergleichen? Allgemeine Java-Themen 6
D Problem mit Referenzen beim Serialisieren Allgemeine Java-Themen 3
W n:m Beziehung Referenzen löschen Allgemeine Java-Themen 5
A Methoden ohne Referenzen finden Allgemeine Java-Themen 9
E EMF Ecore Modell. Referenzen nach außen. Allgemeine Java-Themen 2
F Referenzen auf Objekte Allgemeine Java-Themen 5
hdi Speichergröße von Objekten & Referenzen Allgemeine Java-Themen 8
D Referenzen; == Allgemeine Java-Themen 2
D Referenzen weiterreichen vs. statischer Zugriff Allgemeine Java-Themen 3
G Pointer und Referenzen Allgemeine Java-Themen 3
I Referenzen in Datei speichern Allgemeine Java-Themen 2
J Bibliothek gesucht Ana_lysieren von wss. Referenzen Allgemeine Java-Themen 2
A ArrayListe :Doppelte entfernen -> keine Referenzen Allgemeine Java-Themen 26
O Vektor kopieren (Inhalt, nicht Referenzen) Allgemeine Java-Themen 3
M Übergabe von Referenzen Allgemeine Java-Themen 3
H Referenzen statt Objekte für große Speicherstrukturen Allgemeine Java-Themen 19
P Das leidige Thema: Referenzen Allgemeine Java-Themen 2
N int[] referenzen in ein Array packen, brauche Hilfe. Allgemeine Java-Themen 7
A Referenzen / HashCodes nicht konstant? Allgemeine Java-Themen 2
K Probleme mit Referenzen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben