为什么这个班级不可序列化?
-
20-09-2019 - |
题
我正在使用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警告。
不隶属于 StackOverflow