56 votes

Java: Champs statiques transitoires

Je viens de découvrir en Java que vous pouvez déclarer un champ 'static transient' - le compilateur ne se plaint pas. Cela ne semble pas être utile de quelque manière puisque les champs statiques ne sont pas sérialisés, comme nous le savons tous.

Mais je me demande, y a-t-il réellement un cas où les champs 'static transient' sont utiles ?

41 votes

Les champs statiques transitoires peuvent être détectés via la réflexion. Vous pouvez écrire votre propre sérialiseur pour générer du XML, du JSON, etc. et vous pouvez lui donner un sens spécial si vous avez l'intention de sauvegarder également des variables statiques.

0 votes

+1 pour avoir trouvé un cas d'utilisation. Je pensais que c'était redondant.

3 votes

Soit dit en passant : vous pouvez avoir d'autres combinaisons de modificateurs qui n'ont pas autant de sens, comme un constructeur public sur une classe abstraite ou un constructeur/méthode protégé d'une classe finale.

18voto

alpha123 Points 3600

Non - tu l'as dit toi-même, les champs statiques ne sont pas sérialisés.

C'est un peu étrange que le compilateur te permette de le faire cependant.

24 votes

Ils ne sont pas sérialisés par le sérialiseur Java intégré. Cependant, d'autres sérialiseurs peuvent avoir un comportement différent.

3 votes

Et même avec un autre sérialiseur, quel est l'intérêt de sauvegarder des champs statiques...?

4 votes

@Peter, Au fait le serialVersionUID serait une exception.

17voto

MC Emperor Points 2747

Dans la plupart des cas, cela n'est pas utile. Les champs statiques ne sont en effet pas sérialisés par le sérialiseur par défaut.

Cependant, les champs static transient peuvent être détectés via la réflexion. Si quelqu'un écrit son propre sérialiseur et qu'il veut également sérialiser les champs statiques, alors il pourrait prendre en considération le mot-clé transient et sauter la sérialisation de ce champ particulier.

_PS : Cette réponse est publiée pour plus de complétude, et est basée sur le commentaire de Peter Lawrey. Crédits à lui._

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:

X