3

Bien que je ne prévoie pas actuellement de sérialiser quoi que ce soit, je donne à toutes les classes externes sérialisables, ainsi qu'aux classes imbriquées statiques, un SerialVersionUID, parce que c'est la bonne façon de le faire.Java: Les classes internes et anonymes sérialisables doivent-elles avoir SerialVersionUID?

Cependant, j'ai lu here que

sérialisation des classes internes (à savoir, les classes imbriquées qui ne sont pas des classes de membres statiques), y compris les classes locales et anonymes, est fortement déconseillée pour plusieurs raisons. ...

Ma question est la suivante:

Dois-je donner des cours internes et anonymes un SerialVersionUID chacun, ou devrais-je ajouter un @SuppressWarnings("serial") à ceux?

Est-ce que l'un est plus approprié que l'autre?

Je ferai en tout cas référence à de telles classes transitoires, car je ne veux pas qu'elles soient sérialisées.

+0

Je pense que le conseil que vous ne devriez pas sérialiser ces classes est déconseillé parce que vous ne savez pas si la JVM, qui désérialise les objets a les classes sur le chemin de classe. – keuleJ

+0

Donc, je devrais les traiter comme d'autres classes sérialisables? –

+0

Je n'utiliserais qu'un serialVersionUID, si vous avez besoin de compatibilité entre les versions. par exemple. si vous écrivez les objets dans un fichier ou similaire. – keuleJ

Répondre

3

Donnez-leur une serialVersionUID, parce que:

  • Il est une bonne pratique générale et il n'a certainement pas de mal à le préciser.
  • Les avertissements doivent être adressés, non supprimés.
  • Parfois, les classes internes sont modifiées pour devenir des classes de niveau supérieur lorsqu'elles sont suffisamment grandes.

Il est bon (pour toutes les raisons indiquées dans la documentation à laquelle vous avez lié) que vous ne sérialiserez pas les instances de ces classes internes. Je suppose que si vous étiez paranoïaque ou inquiet, d'autres développeurs pourraient ne pas exercer le même bon jugement, vous pouvez appliquer ce choix en ayant une méthode writeObject dans chaque classe interne qui lève inconditionnellement une exception.

+0

Je suppose que je n'irai pas jusqu'à ajouter des méthodes writeObject à chaque classe interne. D'autant plus que certaines (principalement des classes anonymes) sont destinées à être aussi courtes que possible, pour plus de rangement. Mais je vais ajouter un SerialVersionUID au moins. –

+0

@Lonenebula Vous n'avez généralement pas besoin d'ajouter des méthodes 'writeObject()' etc, sauf si vous avez déjà un problème de sérialisation. – EJP

Questions connexes