Frage

Ich habe die Implementierung von Mersenne-Twister bei verwendet http://www.math.sci.hiroshima-u.ac.jp/~m-mat/mt/versions/java/mtrandom.java Als Drop-In-Ersatz für den Standardwert java.util.Random Klasse. Es sind jedoch vier Felder (ein int, ein Boolescher und zwei Byte []) als markiert als transient. Dies bedeutet, dass ich ein Objekt dieser Klasse nicht serialisieren kann, ohne benutzerdefinierte Funktionen zu implementieren.

Die Frage ist, dass es einen Grund dafür gibt, dass diese Felder als transient gekennzeichnet sind? Gibt es einen Code, in dem Informationen enthält, die keinen Sinn ergeben, wenn das Objekt aus einer Datei eingelesen wird? Ich habe das entfernt transient Modifikator von den Feldern und es scheint einwandfrei zu funktionieren, aber ich habe es nicht intensiv getestet und könnte es Fälle geben, in denen es bricht?

Persönlich kann ich nicht sehen, warum, da alles, was in der Klasse getan wird, arithmetisch ist.

War es hilfreich?

Lösung

Höchstwahrscheinlich die Gründe für das Making alle der nicht statischen Felder der Klasse transient war so, dass die MTRandom Klasse bleibt binär kompatibel mit java.util.Random, von denen es erweitert wird.

Also theoretisch könnten Sie eine serialisieren MTRandom Instanz und deserialisieren es als Random Instanz und alles würde funktionieren.

Wenn diese Felder nicht sind transient, Dann würden sie serialisiert und unvereinbar werden.

Soweit ich das beurteilen kann, sollte das Entfernen der Transienten für Sie jedoch kein Problem verursachen.

Andere Tipps

Aus dem Kommentar zu serialVersionUID, Es sieht so aus, als ob der Autor keine Serialisierung in Betracht ziehen wollte. Hinzufügen transient Kann einige Compiler/Ide -Warnungen unterdrückt haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top