Pourquoi cette classe ne Serializable?
-
20-09-2019 - |
Question
J'utilisais la mise en œuvre Mersenne-Twister http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVA/MTRandom.java en remplacement de drop-in pour la classe par défaut java.util.Random
. Cependant, quatre champs (un int, un booléennes et deux byte []) sont marqués comme transient
. Cela signifie que je ne peux pas sérialiser un objet de cette classe sans mettre en œuvre des fonctionnalités personnalisées.
La question est, est-il une raison que ces champs sont transitoires marqués? Y at-il un code là-dedans qui contient des informations qui ne fera pas de sens lorsque l'objet est lu à partir d'un fichier? J'ai enlevé le modificateur de transient
des champs et il semble fonctionner très bien, mais je ne l'ai pas testé de manière intensive et peut-être donc il y avoir des cas où il rompt?
Personnellement, je ne vois pas pourquoi, puisque tout ce qui est fait dans la classe est arithmétique.
La solution
Très probablement le raisonnement derrière faire tous des champs non statiques de la transient
de classe était si bien que la classe MTRandom
reste compatible binaire avec java.util.Random
, dont elle est prolongée.
Alors théoriquement, vous pouvez sérialiser une instance de MTRandom
et désérialiser comme une instance de Random
et tout fonctionnerait.
Si ces champs ne sont pas transient
, alors ils seraient sérialisé et deviennent incompatibles.
Cependant, pour autant que je peux dire, en supprimant les transitoires ne devrait poser un problème pour vous.
Autres conseils
Dans le commentaire sur serialVersionUID
, il semble que l'auteur ne voulait pas envisager de sérialisation. Ajout transient
peut avoir supprimé certains avertissements compilateur / IDE.