可能重复:
我为什么要关心serialVersionUID?
我正在使用一个实现 Serializable 的类。Eclipse 给了我一个“No Serial UID”警告,但是写和读类工作正常。我想知道具有 UID 的 Serializable 类的目的是什么?这只是一种好的做法,还是没有它我的课最终无法工作?可以是任何数字吗?
可能重复:
我为什么要关心serialVersionUID?
我正在使用一个实现 Serializable 的类。Eclipse 给了我一个“No Serial UID”警告,但是写和读类工作正常。我想知道具有 UID 的 Serializable 类的目的是什么?这只是一种好的做法,还是没有它我的课最终无法工作?可以是任何数字吗?
当您使用不同的 VM 或在不同的机器上对同一个类进行序列化和反序列化时,这一点很重要。UID 用于检查您尝试反序列化的类是否真的是您认为的那个,所以如果您的代码中的类有一个 UID,而被序列化的类有一个不同的 UID,则 de - 序列化将失败。
JVM 会自动给一个没有 UID 的类,但不能保证不同的 JVM 会给同一个类提供相同的 UID。
阅读 Serializable 接口的 javadoc 了解更多细节。
可以是任何数字吗?
理想情况下,它应该是某个特定版本的类所独有的数字(如哈希),如果您对影响序列化字段(非transient
)的类进行更改,则 UID 需要更改。我认为 Eclipse 可以自动为您生成 UID。