Le but de l'UID de version de sérialisation est de garder la trace des différentes versions d'une classe afin d'effectuer une sérialisation valide des objets.
L'idée est de générer un identifiant unique pour une certaine version d'une classe, qui est ensuite modifié lorsque de nouveaux détails sont ajoutés à la classe, comme un nouveau champ, qui affecterait la structure de l'objet sérialisé.
Toujours utiliser le même identifiant, par exemple 1L
signifie qu'à l'avenir, si la définition de la classe est modifiée, ce qui entraîne des changements dans la structure de l'objet sérialisé, il y a de fortes chances que des problèmes surviennent lors de la tentative de désérialisation d'un objet.
Si l'identifiant est omis, Java le calculera pour vous en se basant sur les champs de l'objet, mais je pense que c'est un processus coûteux, donc en fournir un manuellement améliorera les performances.
Voici quelques liens vers des articles qui traitent de la sérialisation et de la gestion des versions des classes :
51 votes
En quoi est-ce une copie exacte ? Je ne demande pas pourquoi le générer du tout, mais pourquoi générer un long serialVersionUID.
13 votes
Quand Jon Skeet utilise serialVersionUID, il utilise 0L : stackoverflow.com/questions/605828/ ;)
9 votes
@HannoFietz : La phrase exacte est : "Pour simplifier, je suggère démarrage avec 0 et en l'augmentant de 1 chaque fois que vous en avez besoin." Donc, il semble qu'il utilise
0L
seulement au début.7 votes
@O.R.Mapper : Voulez-vous dire que Jon Skeet a besoin de revenir en arrière et de mettre à jour le code qu'il a écrit ? Même jusqu'au point d'incompatibilité structurelle. Gasp ! Hérésie !