2

我们有一个非常古老的类,它没有 serialVersionUID。

4 年前,有人用随机值将 serialVersionUID 添加到此类。他应该使用serialver工具来查找值并在添加serialVersionUID时使用它,但事实并非如此。

有客户使用这个类的两个版本。

现在,如果我想反序列化老客户的对象,有什么办法。我无法更改当前的 serialVersionUID,因为新客户会受到影响。

4

1 回答 1

3

您必须编写自己的readObject()方法来处理不同的 UID。

可序列化对象的版本控制”解释了 UID 的含义和规则是什么。

这个答案更详细

我试图找到一个很好的例子,如何为readObject()具有多个 UID 但找不到任何 UID 的对象编写代码。Joshua Bloch 的“Effective Java”中甚至没有一个例子。它只是说“如果你更改 UID,你会得到一个错误”,而不是如何优雅地处理这个错误。

这个问题至少很接近:当对象具有不同的serialVersionUID时,如何现在反序列化保存在数据库中的对象

于 2013-02-06T13:16:46.013 回答