我有一个Serializable
类,我明确声明了serialUID
。
(我这样做是为了确保序列化不会破坏,如果我以后更改我的课程。)
现在我对这个类的子类有同样的顾虑。
我无法理解我是否应该为它们定义serialUID
(具有相同的值),或者基类中的serialUID
是否足够?
答案 0 :(得分:5)
serialUID
仅适用于其所在的特定类别;事实上,它通常是private
。引用Serializable
的Javadoc:
此类声明仅适用于立即声明的类 -
serialVersionUID
字段作为继承成员无效。
答案 1 :(得分:0)
如果更改类的实现,但仍希望能够序列化/反序列化以“旧”格式保存的对象,则使用SerialVersionUID。所以这意味着你必须在子类中实现它,如果你想改变子类而不是超类。但是,如果您不需要这个“版本控制”,则根本不必使用SerialVersionUID。
serialVersionUID应该特定于每个类,但它不一定是(许多人'作弊',只是将其定义为1L)。子类应该获得自己的serialVersionUID。 serialVersionUID特定于类,而不是对象,因为它们是静态的。我认为两个不同的类具有相同的serialVersionUID并不重要,因为它用于反序列化同一类的对象。