Question

Dans le cadre du débogage d'une application, j'ai remarqué que Field.getDeclaredFields() renvoie certains champs synthétiques, y compris un champ serialVersionUID dans une classe étendant une interface, bien qu'aucun n'étende Serializable.

Pourquoi le compilateur ajoute-t-il de tels champs?

<₹UPDATE

En fait, il existe également un champ synthétique $VRc créé.

Était-ce utile?

La solution

Le compilateur / runtime Java ne créera pas automatiquement un champ serialVersionUID.Je soupçonne que vous utilisez une forme de cadre d'encodage de bytecode sous le capot qui est chargé d'ajouter les champs synthétiques soit à l'exécution, soit pendant la compilation.

Le champ $VRc est produit par le framework d'instrumentation Emma, ce serait donc la raison pour au moins un des champs synthétiques.

Le champ serialVersionUID est également ajouté par Emma , lorsque la propriété instr.do_suid_compensation est définie sur true.

Autres conseils

Ce champ est essentiel pour la sérialisation Java.En bref: cela permet à la JVM de découvrir que la classe qui a été sérialisée (par exemple enregistrée sur le disque) a été modifiée par la suite et ne peut pas être désérialisée en toute sécurité en objet.

Consultez le chapitre Contrôle de version du document cité ci-dessus, il explique comment serialVersionUID est utilisé.

MISE À JOUR: je viens de remarquer que votre classe n'implémente pas Serializable.Êtes-vous sûr qu'aucune des super classes ou des interfaces implémentées n'étend pas Serializable?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top