Lorsque vous utilisez serialVersionUID (1L) plutôt que de générer serialVersionUID (3567653491060394677L), vous dites quelque chose.
Vous dites que vous êtes sûr à 100% qu'aucun système ne touchera jamais cette classe qui a une version sérialisée incompatible de cette classe avec un numéro de version de 1.
Si vous pouvez penser à une excuse pour que l'historique de sa version sérialisée soit inconnu, cela pourrait être difficile à dire avec confiance. Au cours de sa vie, un cours réussi sera maintenu par de nombreuses personnes, vivra dans de nombreux projets et résidera dans de nombreux systèmes.
Vous pouvez agoniser à ce sujet. Ou vous pouvez jouer à la loterie en espérant perdre. Si vous générez la version, vous avez une petite chance que les choses tournent mal. Si vous supposez "Hé, je parie que personne n'en a encore utilisé 1", vos chances sont plus grandes que minuscules. C'est précisément parce que nous pensons tous que 0 et 1 sont cool que vous avez plus de chances de les toucher.
-
Lorsque vous générez serialVersionUID (3567653491060394677L) plutôt que d'utiliser serialVersionUID (1L), vous dites quelque chose.
Vous dites que les gens peuvent avoir créé ou généré manuellement d'autres numéros de version au cours de l'histoire de cette classe et cela ne vous dérange pas parce que les Longs font flipper de gros nombres.
Quoi qu'il en soit, à moins que vous ne connaissiez parfaitement l'historique des numéros de version utilisés lors de la sérialisation de la classe dans l'univers entier de l'endroit où elle a existé ou existera, vous tentez. Si vous avez le temps de vous assurer à 100% que 1 est AOK, allez-y. Si c'est trop de travail, allez-y et générez aveuglément le nombre. Vous avez plus de chances de gagner à la loterie que de vous tromper. Si c'est le cas, faites-le moi savoir et je vous achèterai une bière.
Avec toutes ces discussions sur la loterie, je vous ai peut-être donné l'impression que serialVersionUID est généré de manière aléatoire. En fait, tant que la plage de nombres est répartie uniformément sur toutes les valeurs possibles d'un Long, ce serait bien. Cependant, cela se fait de cette façon:
http://docs.oracle.com/javase/6/docs/platform/serialization/spec/class.html#4100
La seule différence que vous obtenez avec cela est que vous n'avez pas besoin d'une source de hasard. Vous utilisez les changements dans la classe elle-même pour changer le résultat. Mais selon le principe du pigeonhole, il y a encore une chance qu'il puisse mal tourner et avoir une collision. C'est incroyablement improbable. Alors bonne chance pour avoir une bière de moi.
Cependant, même si la classe ne vivra que dans un seul système et une seule base de code, penser qu'incrémenter le nombre à la main vous donne zéro chance de collision signifie simplement que vous ne comprenez pas les humains. :)