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.

Était-ce utile?

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.

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