Fråga
Jag använder Eclipse. När jag programmerar klasser så får jag en varning på första raden:
public class MyClass {
….
}
När jag klickar på ikonen (en liten gul triangel) så får jag:
- Add default serial version ID
- Add generated serial version ID
- Rename in file
- Change modifyer to final
Jag undrar vad denna varning innebär och vad man gör att inte få den.
Vänliga hälsningar, Lidiya
Svar
Hej Lidiya,
Med serialisering menas att instanser av en klass skickas ut över en io-ström. På svenska innebär det att objekt av klassen exempelvis kan sparas till disk eller skickas över ett nätverk.
Alla klasser som implementerar interfaces Serializable behöver även ett attribut som ser ut så här:
private static final long serialVersionUID = 1234567890;
Detta för att den som sedan läser upp objektet från exempelvis en disk ska kunna veta vilken version det är. Om det här attributet saknas så skapar Java en åt dig automatisk utan att du märker något.
För att förklara syftet på ett förhoppningsvis enkelt sätt kan du föreställa dig följande situation:
Du och din kompis har knackat ihop ett litet chatprogram där ni kan skicka text och bilder till varandra. Låt oss säga att klassen som innehåller datat ni skickar heter ChatMessage.
Vad händer om din kompis hittar en bugg någonstans i programmet och fixar till det? Kompisen bygger om sin kopia av programmet och så testar ni prata med varandra igen. Oavsett om kompisen gjorde något med ChatMessage så kommer den ha fått ett nytt serienummer och när ni sedan pratar med varandra kommer era program protestera vilt även om just den klassen faktiskt är identisk.
För att lösa det här problemet sätter ni dit ett serienummer och ändrar det bara när ni ändrar i den klassen. På så sätt kan ni bägge två sitta och ändra lite här och där utan att behöva göra exakt samma ändringar för att ni ska kunna prata med varandra. Fast det är klart, ändrar ni i just ChatMessage så är det ju en annan femma.
I verkliga livet har det här stor betydelse för de flesta former av distribuerade system. Så länge man inte ändrar i det som syns för båda sidor kan man göra vad man vill på var sin sida staketet.
För att bli av med varningen så kan du göra något av följande:
1. Lägg till attributet serialVersionUID. Det är ju det den varnar för!
2. Lägg till en annotation för att ignorera varningen just där.
@SuppressWarnings(”serial”)
public class MyClass …..
3. För att bli av med alla sådana varningar oavsett vilken kod du jobbar med kan du gå in under eclipseinställningarna.
Klicka på Window/Preferences i menyn. Gå in under Java->Compiler->Errors/Warnings Leta upp sektionen ’Potential programming problems’. Sätt ’Serializable class without serialVersionUID’ till Ignore.
Jag rekommenderar nummer 1.