我需要在子类中声明序列化UID吗?



我有一个Serializable类,我已经明确声明了serialUID

(我这样做是为了确保如果我以后更改我的类,序列化不会中断)。

现在我对这个类的子类也有同样的关注。

我不明白我是否也应该为它们定义serialUID(具有相同的值),或者基类中的这个serialUID是否足够?

serialUID仅适用于它所在的特定类;事实上,它通常是private。引用Javadoc的Serializable

此类声明仅适用于立即声明的类 - serialVersionUID字段作为继承成员没有用处。

如果您更改类的实现,但仍希望能够序列化/反序列化以"旧"格式保存的对象,则使用 SerialVersionUID。所以这意味着如果你想改变子类而不是超类,你也必须在子类中实现它。但是,如果您不需要此"版本控制",则根本不需要使用SerialVersionUID。

serialVersionUID应该特定于每个类,但它不一定是(许多人"作弊"并仅将其定义为1L)。子类应该获得自己的 serialVersionUID。serialVersionUID 特定于类,而不是对象,因为它们是静态的。我认为两个不同的类是否具有相同的 serialVersionUID 并不重要,因为它用于反序列化同一类的对象。

最新更新