# Wofür wird serialVersionUID gebraucht?



## Marco7757 (21. Oktober 2010)

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?


----------



## Bratkartoffel (21. Oktober 2010)

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


----------



## Tim Bureck (21. Oktober 2010)

Das wird für die Serialisierung benötigt (deswegen tritt diese Warnung bei allen Klassen auf, die das Serializable Interface implementieren). Die Nummer wird bei der Serialisierung hinzugefügt, damit später bei der Deserialisierung damit verglichen werden kann, ob es sich um diese Klasse handeln (vereinfacht ausgedrückt). Es ist also ein *U*nique *ID*entifier.

Siehe auch die letzten zwei Abschnitte der Java Doc von Serializable.


----------



## Thomas Darimont (21. Oktober 2010)

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


----------



## zeja (21. Oktober 2010)

... 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.


----------



## Marco7757 (21. Oktober 2010)

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?


----------



## Tim Bureck (21. Oktober 2010)

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.


----------



## Marco7757 (21. Oktober 2010)

Fazit? Erstellen oder sein lassen?


----------



## genodeftest (22. Oktober 2010)

Solange du Serialisierunghttp://openbook.galileocomputing.de...14_012.htm#mj14ca8883978b04120a93807f5f2d71d4
nicht brauchst, auf jeden Fall sein lassen.


----------



## Sentoo (22. Oktober 2010)

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


----------

