我在http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVA/MTRandom.java使用Mersenne-Twister实现作为默认java.util.Random
类的替代品。但是,四个字段(int,boolean和2个byte [])标记为transient
。这意味着我无法在不实现自定义功能的情况下序列化此类的对象。
问题是,有没有理由将这些字段标记为瞬态?是否有任何代码保存从文件中读取对象时没有任何意义的信息?我从字段中删除了transient
修饰符,它似乎工作正常,但我没有对它进行过密集测试,所以可能会出现故障吗?
就个人而言,我不明白为什么,因为在课堂上所做的一切都是算术的。
答案 0 :(得分:2)
从serialVersionUID
的评论来看,作者似乎不想考虑序列化。添加transient
可能会抑制一些编译器/ IDE警告。
答案 1 :(得分:-1)
最有可能推断出类transient
的非静态字段全部背后的原因是MTRandom
类与java.util.Random
保持二进制兼容,它从中延伸。
理论上,您可以序列化MTRandom
实例,并将其反序列化为Random
实例,一切都可行。
如果这些字段不是transient
,那么它们将被序列化并变得不兼容。
但是,据我所知,消除瞬态不应该对你造成问题。