¿Por qué es esta clase no Serializable?
-
20-09-2019 - |
Pregunta
Yo estaba usando la aplicación de Mersenne Twister- http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVA/MTRandom.java como un reemplazo de acogida para la clase java.util.Random
defecto. Sin embargo, cuatro campos (un int, un valor booleano y dos byte []) se marcan como transient
. Esto significa que no puedo serializar un objeto de esta clase sin implementar funcionalidad personalizada.
La pregunta es, ¿hay alguna razón por la que estos campos están marcados transitoria? ¿Hay algún código de ahí que contiene información que no tiene ningún sentido cuando el objeto se lee de un archivo? Quité el modificador transient
de los campos y parece que funciona bien, pero yo no lo he probado intensamente y así podría haber casos en los que se rompe?
En lo personal, no puedo ver por qué, ya que todo lo que se hace en la clase es aritmética.
Solución
Lo más probable es el razonamiento detrás de hacer todos de los campos no estáticos de la clase transient
era para que la clase MTRandom
permanece compatible a nivel binario con java.util.Random
, de la que se extiende.
Así que, teóricamente, puede serializar una instancia MTRandom
y deserializar como una instancia Random
y todo iba a funcionar.
Si estos campos no se transient
, entonces habría serializado y resultar incompatibles.
Sin embargo, en lo que puedo decir, la eliminación de los transitorios no debe causar un problema para usted.
Otros consejos
A partir de la observación sobre serialVersionUID
, parece que el autor no quería tener en cuenta la serialización. Adición de transient
puede haber suprimido algunas advertencias compilador / IDE.