繁体   English   中英

为什么此类不能序列化?

[英]Why is this class not Serializable?

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

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

就个人而言,我看不出原因,因为在该类中完成的所有操作都是算术的。

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

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

因此,从理论上讲,您可以序列化一个MTRandom实例,并将其反序列化为一个Random实例,然后一切正常。

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

但是,据我所知,消除瞬变不会对您造成问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM