Avatar billede martinhrj Nybegynder
10. april 2005 - 21:25 Der er 13 kommentarer og
1 løsning

warning: serializable class does not declare serialVersionUID

Jeg har lige downloaded en ny version af Eclipse(3.1), som understøtter java 1.5. Og det er jo godt :) Men jeg får nogle warnings, som jeg ikke helt kan greje. Helt præcist 14 warnings af typen:

The serializable class "classname" does not declare a static final serialVersionUID field of type long.

Helt præcist prøver den at advare mig imod?
Avatar billede arne_v Ekspert
10. april 2005 - 21:30 #1
Har du serialiseret noget med Java 1.4 som du nu forsøger at deserialisere med
Java 1.5 ?
Avatar billede martinhrj Nybegynder
10. april 2005 - 21:36 #2
Ikke med vilje i hvert fald :)

Jeg har lagt mærke til at den gør det ved alle klasser som extender noget swing... dog også ved en klasse som extender Exception.
Avatar billede _carsten Nybegynder
10. april 2005 - 21:44 #3
Den fortæller bare at din klasse enten implementerer Serializable eller extender en klasse som implementerer Serializable og i den forbindelse mangler din klasse et serialVersionUID

Jeg plejer at bruge denne

private static final long serialVersionUID = 22302004091201L;

Lidt forklaring til nummeret:
2230 = kl. 22:30
2004 = årstal
09 = måned
12 = dato
01 = version

Så kan jeg altid aflæse en hulens masse ting udfra serialVersionUID
Avatar billede arne_v Ekspert
10. april 2005 - 21:45 #4
Har du prøvet at recompile alt (f.eks. slette alle dine .class filer og lade
Eclipse rebuilde) ?
Avatar billede martinhrj Nybegynder
10. april 2005 - 21:53 #5
Ja, jeg har lige prøvet at lade Eclipse rebuilde alt. Og stadig samme warnings.

Carsten: Det er da meget fikst ;) Nu har jeg også lige læst lidt om den der serialVersionUID i javadocs. Spøjst, at man ikke fik de warnings i 1.4.

Tak for hjælpen! (svar?)
Avatar billede _carsten Nybegynder
10. april 2005 - 22:02 #6
Skyldes compiler option -Xlint og jeg kan ikke lige huske om den er i 1.4

Eclipse er åbenbart default sat op til at compile -Xlint, (eller du har selv gjort det)
Avatar billede arne_v Ekspert
10. april 2005 - 22:07 #7
Ja for serialVersionUID er ikke ny i 1.5 (de reklamerer mere for den i 1.5, men
den er ikke ny)
Avatar billede martinhrj Nybegynder
10. april 2005 - 22:11 #8
Eclipse sætter den åbentbart som default.
Avatar billede _carsten Nybegynder
10. april 2005 - 22:12 #9
Avatar billede _carsten Nybegynder
10. april 2005 - 22:14 #10
Nå - undskyld Arne, du snakker serialVersionUID, jeg snakkede -Xlint
Avatar billede martinhrj Nybegynder
10. april 2005 - 22:15 #11
Forresten lige et spørgsmål, Carsten, til den måde du laver dit UID på. Jeg går ud fra, at du laver den dynamisk, men giver det ikke problemer med at 2 forskellige versioner af et program, som ikke indeholder forskelle i den klasse som indeholder UID'et. De vil jo ikke være kompatible, hvis de skal udveksle info?...
Avatar billede _carsten Nybegynder
10. april 2005 - 22:44 #12
Jeg ikke sikker på jeg helt forstår spørgsmålet, men nej - jeg laver det ikke dynamisk, UID'et anvendes jo kun i forbindelse med serialisering og hvis der ikke er forskelle i klassen ændrer jeg ikke UID'et. UID'et definerer jeg når jeg konstruerer klassen
Avatar billede martinhrj Nybegynder
10. april 2005 - 22:49 #13
Ok. Der er ikke noget problem, når UID'et er statisk, så never mind ;)
Avatar billede snoop_one Nybegynder
10. april 2005 - 22:58 #14
Inde i eclipse så kan du sætte din cursor på warningen og trykke ctrl+1 så får du en quick fix popup og deri kan du vælge at den skal generer en default serialVer.. eller den skal generer en serialVer.. iht. din klasse...
Men carstens metode er faktisk meget smart :0)

Du kan desuden, hvis du vil (vil dog ikke anbefale det), slå denne warning fra inde under preferences|java|compiler|errors/warnings også vælge potential programming problems derunder kan du vælge at den skal ignore Serializable class without serialVersionUID
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester