2011-01-10 7 views
1

Ich habe die folgende KlassenhierarchieSerialisierung, Zusammenstellung und Byte-Code-Generierung

ParentInterface 

     | 
     v 
    ParentClass 

    / \ 
     v  v 

    SubClass1 SubClass2 

Die Schnittstelle erstreckt sich nicht Serializable Schnittstelle und keine der Serializable Schnittstelle als auch Klassen implementieren. Alle Klassen wurden kompiliert und in eine JAR-Datei gepackt.

Jetzt ändere ich die , so dass es Serializable Schnittstelle erweitert. Danach ersetze ich nur die ParentInterface.class Datei im Glas.

Ich habe einen Code, wo ich versuche, eine Instanz von SubClass1 und SubClass2 zu serialisieren. Wenn ich versuche zu serialisieren, bekomme ich NotSerializableException.

Ich nehme an, wenn ich alle Klassen wieder kompiliert und sie in meinem Glas ersetzt hätte, hätte es funktioniert. Was ist falsch, wenn ich nur die ersetzen?

+3

Gehen Sie nicht davon aus, dass es bei einer Neukompilierung funktionieren würde - versuchen Sie es und finden Sie es heraus. – skaffman

Antwort

1

Alle Subtypen einer serialisierbaren Klasse sind selbst serialisierbar.

Nach JavaDoc, die SubClass1 und SubClass2 sollte serializable sein .. es sei denn, sie haben einige Felder, die nicht serialisierbar sind.

Überprüfen Sie doppelt die Serialität der Felder innerhalb SubClass1 und SubClass2.

1

Dies kann helfen ..

SubClass1 und SubClass2 wird definitions serializable sein

jedoch wie empfohlen besonderes Augenmerk auf Felder in beiden SubClass1 und SubClass2 enthalten bezahlen. Beachten Sie die im JDK beschriebene Einschränkung.

Bei der Deserialisierung der Felder nicht serialisierbaren Klassen kein argument Konstruktor der Klasse mit dem öffentlichen oder geschützt werden initialisiert. Auf die Unterklasse, die serialisierbar ist, muss ein No-Arg-Konstruktor zugreifbar sein. Die Felder der serialisierbaren Subklassen werden aus dem Stream wiederhergestellt.

Seien Sie sicher, "un-serialisable" Felder als transiente oder gegebenenfalls handeln zu machen.