33 votes

Est-ce que ce que je choisis pour serialVersionUID lors de l'extension de classes Serializable en Java est important?

Je suis de l'extension d'une classe (ArrayBlockingQueue) qui implémente l' interface Serializable. Du soleil, de la documentation (et mon IDE) me conseille que je devais définir cette valeur afin de prévenir les méfaits:

Cependant, il est fortement recommandé que toutes les classes sérialisables déclarer explicitement serialVersionUID valeurs, car la valeur par défaut serialVersionUID calcul est très sensible à la classe des détails qui peuvent varier en fonction du compilateur implémentations, et peut donc entraîner des résultats inattendus InvalidClassExceptions lors de la désérialisation.

Maintenant, je ne pouvais pas moins de soins sur quelle valeur mettre dedans. Est-il question?

54voto

Jon Skeet Points 692016

Non - tant que vous le modifiez au bon moment (c'est-à-dire lorsque vous apportez une modification qui affecte la sérialisation, par exemple la suppression d'un champ), la valeur que vous utilisez ne devrait pas avoir d'importance.

Pour des raisons de simplicité, je suggérerais de commencer par 0 et de l'augmenter de 1 chaque fois que vous en avez besoin.

La spécification de sérialisation a plus de détails.

10voto

GaryF Points 11921

La seule chose qui compte pour le serialVersionUID est que compatible au niveau binaire sérialisé versions de la classe ont la même serialVersionUID; qui est, si vous ne l'avez pas fait tous les changements importants apportés à la forme sérialisée de la classe, ça va être bien.

Bien sûr, une meilleure option est d'utiliser les options avancées de sérialisation met à votre disposition, de sorte qu'il n'y a aucune rupture de changements. Je vous suggère de lire sur readResolve() et al. Efficace Java couvre quelques-uns des plus épineux problèmes dans ce domaine dans le détail.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: