我使用序列化机制来保存和加载来自HDD的对象。我认为定义字段" serialVersionUID"对我来说是多余的。
我怎么能说JVM没有比较这些字段?
Exception in thread "main" java.io.InvalidClassException: ClientRepository; local class incompatible: stream classdesc serialVersionUID = -477189107700903771, local class serialVersionUID = 1
答案 0 :(得分:0)
您可以添加固定的静态长终结字段serialVersionUID。然后,只需要在结构发生变化时进行更改。
否则javac编译器会根据类的结构计算serialVersionUID。并将隐藏的字段添加到类中(如默认构造函数)。
最后一种方法是实现readObject/writeObject
,允许两个密切版本差异之间的兼容性,通过在不同版本上进行转换。