2017-07-09 5 views
0

Gibt es einen Weg, wo ich verhindern kann, dass die Elternklasse serialisiert wird?Verhindern Serialisierung der Elternklasse Java

Bei der Serialisierung der Unterklasse bis zur übergeordneten Klasse wird die Serialisierung durchgeführt.

Kann ich die Serialisierung der übergeordneten Klassen einschränken und die einzige Unterklasse serialisieren, an der ich gerade arbeite?

+0

Jede Instanz der Unterklasse wird konstruiert, indem zuerst die Basisklasse erstellt wird. Sie fragen sich also, warum Sie nur die Unterklasse und nicht die Basisklasse serialisieren möchten. – JRG

+0

Zu Ihrer Information: Ich habe meine Antwort umformuliert, um klarer zu machen, warum ich Ihre Idee abgelehnt habe. Lass es mich wissen, wenn du das hilfreich findest. – GhostCat

Antwort

3

Es ist ist möglich. Erklären Sie einfach Ihre Klasse als implements Externalizable und schreiben Sie genau, was Sie in der writeExternal() Methode benötigen, achten Sie darauf, nichts von der Oberklasse zu serialisieren, und lesen Sie genau das zurück in der Methode.

Oder nur Serializable implementieren und Ihre eigenen readObject()/writeObject() Methoden bieten, wieder darauf achten, dass nichts von der übergeordneten Klasse serialisiert werden, und in diesem Fall auch defaultWriteObject() oder defaultReadObject() nicht aufrufen.

In beiden Fällen liegt die eigentliche Serialisierung der Daten der aktuellen Klasse ganz bei Ihnen.

0

Während es technisch möglich ist, jedes Vererbungsebenen selbst fein abzustimmen - auch wenn Super-Klassen-Felder ausgeschlossen werden - möchten Sie vielleicht hier einen Schritt zurückgehen.

Grundsätzlich gibt es zwei Fälle:

  1. Die Superklasse hat keine Felder/Zustand. Dann hast du sowieso nichts auszuschließen.
  2. Die Superklasse hat einen Zustand, der durch Felder dieser Klasse repräsentiert wird.

Also wie denkst du, um den zweiten Teil sinnvoll zu adressieren? Sie sehen, wenn Sie die Deserialisierung ohne die Daten für die Super-Klassen-Felder zulassen - das bedeutet, dass Sie möglicherweise viele zusätzliche Tests durchführen müssen. Um sicherzustellen, dass Superklassenmethoden keine Ausnahmen auslösen, weil plötzlich Felder null sind, anstatt initialisiert zu werden.

Mit anderen Worten: Es ist möglich, dass Sie alle diese Werte "auslassen" - Sie erstellen Objekte, die sich völlig anders verhalten. Sind Sie bereit für den Umgang mit all diesen Effekten?

Meanung: Das Überspringen von Superklassenfeldern erfordert, dass Sie den Serialisierungscode stören. Es kann viel zusätzlichen Testaufwand erfordern. Und was gewinnst du? Ein paar Bytes weniger Datentransfer zur Laufzeit.

Darüber hinaus: Was ist der Zweck einer Inhernement-Hierarchie, die 4 Ebenen hat - aber wo der Super-Klasse-Zustand ist irrelevant?

Also meine Nicht-Antwort: Überlegen Sie sorgfältig, ob Ihre Idee wirklich das beste OO-Design ist, um die zugrunde liegenden Anforderungen zu lösen.

+0

Die Unterklasse, die ich verwende, hat eine Vererbungsstufe von 4.So für die Serialisierung bin ich nur besorgt über die Daten meiner Unterklasse.Ich möchte nicht die gesamte Vererbungshierarchie meiner Unterklasse beim Serialisieren – now30

+1

dumpen Bitte sehen Sie meine Updates.Aber wieder - was du verlangst macht keinen Sinn. Darüber hinaus hat 4 Ahnenklassen einen schlechten Design-Geruch. – GhostCat

+0

Einverstanden. Aber ich habe keine Kontrolle über die Klassenhierarchie.Ich mache nach dem vorgeschriebenen Design, wie ich eine Unterklasse haben muss.Aber wenn es keine Möglichkeit gibt, die Elternklasse Serialisierung zu verhindern .. lass mich zurück zum Zeichenbrett – now30