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

Je prolonge une classe (ArrayBlockingQueue) qui implémente l’ interface Serializable . La documentation de Sun (et mon IDE) me conseille de définir cette valeur pour éviter les méfaits:

Cependant, il est fortement recommandé que toutes les classes sérialisables déclarent explicitement les valeurs serialVersionUID, car le calcul serialVersionUID par défaut est très sensible aux détails de classe qui peuvent varier en fonction des implémentations du compilateur et peuvent donc entraîner des exceptions InvalidClassException inattendues.

Maintenant, je me fous de la valeur à y mettre. Est-ce que ça importe?

Non – tant que vous le changez au bon moment (c’est-à-dire lorsque vous apportez une modification qui affecte la sérialisation, par exemple en supprimant un champ), la valeur que vous utilisez ne doit pas avoir d’importance.

Pour simplifier, je suggère 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.

La seule chose qui compte pour serialVersionUID est que les versions sérialisées compatibles binarys de la classe ont le même serialVersionUID; c’est-à-dire que si vous n’avez apporté aucune modification à la forme sérialisée de la classe, tout ira bien.

Bien entendu, une meilleure option consiste à utiliser les options avancées que la sérialisation met à votre disposition pour qu’il n’y ait jamais de changements majeurs. Je suggère de lire à propos de readResolve () et al. Java efficace couvre en détail certaines des questions les plus épineuses dans ce domaine.