开发者

Why is this class not Serializable?

开发者 https://www.devze.com 2022-12-14 09:44 出处:网络
I was using the Mersenne-Twister implementation at http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVA/MTRandom.java as a drop-in replacement for the default java.util.Random class. However,

I was using the Mersenne-Twister implementation at http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVA/MTRandom.java as a drop-in replacement for the default java.util.Random class. However, four fields (an int, a boolean and two byte[]) are marked as transient. This means that I can't serialize an object of this class without implementing custom functionality.

The question is, is there any reason that these fields are marked transient? Is there any code in there that holds information that won't make any sense when the object is read in from a file? I removed the transient modifier from the fields and it seems to work fine, but I haven't tested it intensively and so might there be cases where it breaks?

Personally, I can't see why, since 开发者_JAVA技巧all that's done in the class is arithmetic.


From the comment on serialVersionUID, it looks like the author didn't want to consider serialisation. Adding transient may have suppressed some compiler/IDE warnings.


Most likely the reasoning behind making all of the non-static fields of the class transient was so that the MTRandom class stays binary compatible with java.util.Random, from which it is extended.

So theoretically, you could serialize an MTRandom instance, and deserialize it as a Random instance and everything would work.

If those fields aren't transient, then they would be serialized and become incompatible.

However, as far as I can tell, removing the transients shouldn't cause a problem for you.

0

精彩评论

暂无评论...
验证码 换一张
取 消