我是否需要在Serializable类的祖先上放置serialVersionUID?

时间:2011-05-10 21:23:59

标签: java serialization

我是否需要将serialVersionUID放在Serializable班的祖先身上?或者仅在Serializable班级本身?

1 个答案:

答案 0 :(得分:3)

您根本不需要输入serialVersionUID。

Java将根据字段,方法等自动为您的类确定适当的序列ID。

拥有serialVersionUIDs的唯一合适时间是将对象存储到文件中,并且需要稍后加载它们,即使在更改了代码之后也是如此。

或者,如果您要在使用不同版本库的组件之间通过网络传输数据。

90%的人需要序列化,这是实时的,双方的库版本匹配得到保证。在这些情况下,如果您有两个不兼容但未更改sID的库版本,则不需要设置serialVersionUID,它实际上可能会导致问题。你会开始得到奇怪的错误,因为Java认为它们是串行兼容的,实际上,它们不是。

同样看看这些问题:

Is there a reason to use a real serialVersionUID?

Why generate long serialVersionUID instead of a simple 1L?

What is a serialVersionUID and why should I use it?

编辑添加:

至于原来的问题,不需要担心你的祖先。只是serialVersionUID会告诉Java它是否兼容。

但是,如果祖先发生了变化,并且你的serialVersionUID没有改变,即使你说它也可能不兼容。你不应该设置它的另一个原因。