[英]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.