我正在使用一个实现Serializable的类。 Eclipse给了我一个“No Serial UID”警告,但编写和阅读该类工作正常。我想知道具有UID的Serializable类的目的是什么?这只是一种好的做法,还是我的班级最终没有它会不会工作?它可以是任何数字吗?
答案 0 :(得分:5)
使用不同的VM或在不同的计算机上对同一个类进行序列化和反序列化非常重要。 UID用于检查您尝试反序列化的类是否真的是您认为的类,因此如果您的代码中的类具有一个UID,并且序列化的类具有不同的类,则de - 序列化将失败。
JVM会自动给出一个没有UID的类,但不能保证不同的JVM会为同一个类提供相同的UID。
Read the javadoc of the Serializable interface for more details.
可以是任何数字吗?
理想情况下,它应该是您的类的特定版本(如哈希)所特有的一些数字,如果您对类影响序列化字段(非transient
)进行更改,则UID需要更改。我认为Eclipse可以自动生成UID。