Wofür wird serialVersionUID gebraucht?

Marco7757

Mitglied
Ich bin im Internet durchaus auf einige Erklärungen gestossen, jedoch war keine für mich klar verständlich, sodass ich das jetzt verstehen täte.

Eclipse meckert bei mir ständig herum, dass eben dieses Feld (serialVersionUID, final, long) fehle. Aber wofür brauche ich denn das?
 
Hallo,

die serialVersionUID wird benötigt, wenn du eine Instanz der Klasse in eine Datei schreibst oder aus einer liest. Stichpunkte: Serialisierung, ObjectOutputStream, ObjectInputStream

Gruß
BK
 
Hallo,

ob es sich um diese Klasse handeln (vereinfacht ausgedrückt). Es ist also ein Unique IDentifier.
...genauer gesagt kann man über die serialVersionUID prüfen, ob es sich um die gleichen Versionen der Klasse handelt. Deshalb sollte man die serialVersionUID bei Seralisierungs-relevanten Strukturänderungen immer mit ändern (inkrementieren).

Gruß Tom
 
... und weil man das so leicht vergisst diese mit zu ändern, sollte man sie gar nicht erst selber reinschreiben und das Warning in eclipse ausstellen.
 
Jetzt bin ich aber doch etwas verwirrt. Ich soll das Warning ausschalten? Aber die wird doch jetzt irgendwie benötigt, wenn ich mehrere Objekte (?) einer Klasse erstelle ... wieso soll cih sie nun ausschalten?
 
Definierst du sie nicht selbst, wird sie automatisch anhand der Member deiner Klasse erzeugt. Allerdings wird in der Doku davor gewarnt, da dieser Vorgang Compilerabhängig ist. Es kann also sein, dass ein- und dieselbe Klasse verschiedene UIDs bekommen kann.
 
Ich schätze, das hängt davon ab ...

... ob Du Serialisierung bewusst benutzt, um Objekte zu speichern. z.B. wenn du eine Objekt Datenbank wie db4o oder objectdb verwendest. In dem Fall solltest Du bewusst die ID generieren, wenn es relevante Änderungen in deinen Objekten gab, die es unmöglich machen sie mit alten abgespeicherten Zuständen wieder hergestellt werden. Dann solltest Du dir wohl Gedanken darum machen, was Du mit den alten Daten anfängst, migrieren, wegwerfen, ...

... ob Du Serialisierung benutzt, weil Daten kurzlebig ausgetauscht werden müssen. z.B. um den View State bei JSF zu generieren. Da ist es denke ich egal. Außer du erlaubst, dass Sessions der User den Neustart eines Servers überleben. In dem Fall müssen die alten, serialisierten Objekte auch wieder zu den entsprechenden Klassen passen, sonst knallt es ...

Je mehr ich darüber nachdenke ... ich glaube Du müsstest Dir Gedanken machen oder uns sagen, wozu Du das machst

:)
 
Zurück