serialVersionUID n'est plus requis à partir de Java 5?
-
29-10-2019 - |
Question
J'ai récemment lu un commentaire indiquant que l'utilisation de SerialVersionuid pour que différentes versions de la même classe compatibles pour la sérialisation / la désérialisation ne soient plus nécessaires depuis Java 5.Est-ce correct?Peut-être que cela a été mélangé avec des types de retour de Covariant.Alors voulais vérifier avec vous tous.
La solution
Le Javadocs pour Java 5 stipule toujours qu'il est nécessaire:
Si une classe sérialisable ne déclare pas explicitement de SerialVersionSionUID, le temps d'exécution de la sérialisation calculera une valeur SerialVersionUID par défaut pour cette classe en fonction de divers aspects de la classe, comme décrit dans la spécification de sérialisation de l'objet Java (TM). Toutefois, il est vivement recommandé que toutes les classes sérialisables déclarent explicitement des valeurs SerialVersionUID, car le calcul SerialVersionUID par défaut est très sensible aux détails de la classe pouvant varier en fonction des implémentations du compilateur et peut ainsi entraîner des décomptions invalides inattendues lors de la désérialisation. Par conséquent, pour garantir une valeur séralversion cohérente dans différentes implémentations de compilateur Java, une classe Serializable doit déclarer une valeur SerialVersionUID explicite. Il est également informé vivement que les déclarations SerialVersionUID explicites utilisent le modificateur privé dans la mesure du possible, dans la mesure du possible, car de telles déclarations s'appliquent uniquement aux champs de classe immédiatement après la déclaration - Série SerialVersionUID ne sont pas utiles comme des membres hérités.
Autres conseils
Depuis Java 1.4, vous avez pu utiliser Xmlencoder pour la sérialisation et cela ignore tout SerialVersionSionUID, de même que la plupart des autres bibliothèques de sérialisation.
Toutefois, si vous utilisez ObjectOutPutStream, son utilisation de SerialVersionSIID n'a pas changé.