Java Serializable:serialVersionUID的重要性?

Fly*_*ynn 1 java serialization

可能重复:
我为什么要打扰serialVersionUID?

我正在使用一个实现Serializable的类.Eclipse给了我一个"No Serial UID"警告,但编写和阅读该类工作正常.我想知道具有UID的Serializable类的目的是什么?这只是一种良好的做法,还是我的班级最终没有它会有效?可以是任何数字吗?

tru*_*ity 5

使用不同的VM或在不同的计算机上对同一个类进行序列化和反序列化非常重要.UID用于检查您尝试反序列化的类是否真的是您认为的类,因此如果您的代码中的类具有一个UID,并且序列化的类具有不同的类,则de - 序列化将失败.

JVM会自动给出一个没有UID的类,但不能保证不同的JVM会为同一个类提供相同的UID.

阅读Serializable接口的javadoc以获取更多详细信息.

可以是任何数字吗?

理想情况下,它应该是您的类的特定版本(如哈希)所特有的一些数字,如果您对类影响序列化字段(非transient)进行更改,则UID需要更改.我认为Eclipse可以自动生成UID.