我需要在子类中声明serialUID吗?

时间:2013-12-27 11:40:27

标签: java

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

(我这样做是为了确保序列化不会破坏,如果我以后更改我的课程。)

现在我对这个类的子类有同样的顾虑。

我无法理解我是否应该为它们定义serialUID(具有相同的值),或者基类中的serialUID是否足够?

2 个答案:

答案 0 :(得分:5)

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

  

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

答案 1 :(得分:0)

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

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