我正在使用Mersenne-Twister实施 http://www.math.sci.hiroshima-u.ac.jp/~m-mat/mt/mt/mt/versions/java/mtrandom.java 作为默认值的置换式替换 java.util.Random 班级。但是,四个字段(一个int,一个布尔值和两个字节[]被标记为 transient. 。这意味着我无法在不实现自定义功能的情况下序列化此类的对象。

问题是,是否有任何理由将这些字段标记为瞬态?那里是否有任何代码在文件中读取对象时不会有任何意义的信息?我删除了 transient 从字段中进行的修改器,它似乎可以正常工作,但是我没有进行深入测试,因此可能会破裂吗?

就个人而言,我看不到为什么,因为班上所有的事情都是算术。

有帮助吗?

解决方案

最有可能背后的推理 全部 班级的非静态字段 transient 是这样的 MTRandom 课程与二进制兼容 java.util.Random, ,从中扩展。

因此,从理论上讲,您可以序列化 MTRandom 实例,并将其作为一个 Random 实例和一切都会起作用。

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

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top