SerialVersionUID warning, que faire ?

Résolu
jklms Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   -  
jklms Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je programme en java avec Eclipse. J'essaie toujours de régler tous les warnings qu'il me propose, mais j'en ai un dont je ne sais pas quoi faire :
The serializable class IncorrectAutoCheckFile does not declare a static final serialVersionUID field of type long
add default serial version ID
add generated serial version ID
add @Suppress warnig

Je ne comprends pas vraiment quel est le problème, j'ai très très souvent ce warning, jusqu'à présent je ne faisais rien, mais maintenant que je me débrouile un peu mieux en java j'aimerais savoir pourquoi j'ai ce warning, et ce qu'il faut faire pour le régler.

Merci

3 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Lorsqu'une classe est Serializable (elles le sont toutes en Swing par exemple) elle devrait avoir un numéro de version.

Par défaut tu peux faire comme ceci :

private static final long serialVersionUID = 1;

Certains outils comme Eclipse peuvent également générer une valeur "unique" pour la classe en faisant une sorte de hachage sur les attributs, ce qui permet d'avoir un numéro différent à chaque fois que tu ajoutes ou supprimes un attribut.

Le but de cet identifiant étant de savoir lors du processus de (dé)sérialisation si l'objet que tu manipules est bien une instance de la classe que tu veux lui attribuer.

Voir la documentation : https://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html
1
jklms Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
donc, si je comprends bien, dans les projets où on ne se sert pas de Sérialization, on peut "s'en foutre" et ajouter un suppress warning...
merci ;)
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Sauf que tu ne sais pas toujours les classes qui ont besoin de sérialiser des objets, ce n'est pas parce que tu ne l'utilises pas explicitement, qu'il n'y a pas un mécanisme "caché" qui va l'utiliser.

Moi je dirais plutôt que si tu es dans un cas simple, c'est à dire où tu ne mélanges pas plusieurs versions de la même classe, alors tu mets 1 tout le temps. Ça supprimera tes warning et ça t'évite d'éventuelles erreurs plus tard, donc ça coûte rien de rajouter une petite ligne de code...

Il n'y a vraiment que dans le cas où tu utilises intensivement la sérialisation où il faudrait penser à changer tous les numéros de versions à chaque changement, mais effectivement dans ton cas, ça n'a pas grande importance.
0
jklms Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
merci beaucoup, c'est plus clair maintenant
0