0

我在http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVA/MTRandom.java使用 Mersenne-Twister 实现作为默认的替代品java.util.Random班级。但是,四个字段(一个 int、一个 boolean 和两个 byte[])被标记为transient. 这意味着我无法在不实现自定义功能的情况下序列化此类的对象。

问题是,是否有任何理由将这些字段标记为瞬态?那里是否有任何代码包含从文件中读取对象时没有任何意义的信息?我transient从字段中删除了修饰符,它似乎工作正常,但我没有对它进行深入测试,所以可能会有它坏掉的情况吗?

就个人而言,我不明白为什么,因为课堂上所做的都是算术。

4

2 回答 2

2

从评论serialVersionUID来看,作者似乎不想考虑序列化。添加transient可能会抑制一些编译器/IDE 警告。

于 2009-12-17T12:35:25.173 回答
-1

制作类的所有非静态字段背后的原因很可能transient是为了使类与扩展它的MTRandom保持二进制兼容。java.util.Random

所以理论上,你可以序列化一个MTRandom实例,然后将它反序列化为一个Random实例,一切都会正常工作。

如果这些字段不是transient,那么它们将被序列化并变得不兼容。

但是,据我所知,移除瞬变不会给您带来问题。

于 2009-12-17T00:16:55.987 回答