将serialVersionUID添加到已在使用的可序列化类中

Mar*_*o F 3 java legacy serialization

Serializable自2004年左右开始,我就有了一个在生产中使用的课程.然而,写这篇文章的人忘了生成一个serialVersionUID.

整个事情有点工作(有一个很大的评论警告,不要触及班级中的任何东西),但是当我在一个相关的不同类中工作时,我有一个InvalidCastException,所以我想添加serialVersionUID以确保该类正常工作.

问题是,是否可以添加这样的字段,而不会破坏现有的序列化实例?它们很多,并没有简单的方法来修改它们.

我的想法来自于看到异常消息,这是以下内容:

java.io.InvalidClassException: the.problematic.Class; local class incompatible: stream classdesc serialVersionUID = -8802277085918151566, local class serialVersionUID = -3137213695071887162"
Run Code Online (Sandbox Code Playgroud)

我认为我可以使用隐式串行(跟踪中的流classdesc)作为序列,它应该保持向后兼容性.它是否正确?我(或多或少)确保我们在整个系统中获得的所有序列化实例都具有相同的版本.

Joa*_*uer 5

是的,serialVersionUID为计算的on 指定完全相同的值应该可以防止向后兼容(例如,Eclipse有一个选项可以做到这一点,称为"添加生成的串行版本ID").