Sobes.tech
Middle
180

Wanneer moet de waarde van het veld serialVersionUID worden gewijzigd?

Antwoord van AI

sobes.tech AI

De waarde van serialVersionUID moet worden gewijzigd bij onverenigbare wijzigingen in de structuur van de serialiseerbare klasse. Dit geeft aan dat de geladen geserialiseerde gegevens betrekking hebben op een oude versie van de klasse en niet compatibel zijn met de huidige versie, waardoor een InvalidClassException wordt voorkomen. Als serialVersionUID niet wordt gewijzigd, beschouwt de JVM de klasseversies als compatibel, wat kan leiden tot incorrect gedrag of fouten tijdens deserialisatie vanwege verschillen in de structuren.

Sommige wijzigingen vereisen over het algemeen niet het wijzigen van serialVersionUID (behalve als ze de standaard serialisatiemethoden beïnvloeden):

  • Toevoegen van nieuwe velden (als ze niet als final zijn gemarkeerd).
  • Toevoegen of verwijderen van methoden.
  • Wijziging van de toegangsmodifiers van velden (behalve static en transient).

Het wordt aanbevolen om expliciet serialVersionUID te definiëren in serialiseerbare klassen. Dit geeft controle over de compatibiliteit tussen versies. Als het veld niet is gespecificeerd, genereert de JVM het automatisch op basis van de kenmerken van de klasse, wat kan leiden tot compatibiliteitsproblemen bij kleine codewijzigingen die echter het algoritme voor ID-generatie wijzigen. Typisch gebruik:

public class MySerializableClass implements java.io.Serializable {
    private static final long serialVersionUID = 1L; // Beginwaarde
    private String someField;

    // ... andere velden en methoden
}

Bij incompatibele wijzigingen in de klasse moet de waarde 1L worden gewijzigd in een andere, bijvoorbeeld gegenereerd met het serialver-hulpmiddel of geïncrementeerd (2L).