如果我将一个类定义为Serializable,那么当我创建一个子类时,它会要求我定义一个serialVersionUID。这是必要的还是我可以依靠超级班的那个?
答案 0 :(得分:4)
我曾经将SerialVersionUID声明为单独的(可能是顶级的),例如:
public static final long GlobalSerialVersionUID=0L;
然后在每个Serializable
类中声明:
private static final long serialVersionUID = MyTopClass.GlobalSerialVersionUID;
这种方法可以保证您将始终拥有相同的SerialVersionUID,并且如果您要在不同的序列化版本之间实现数据交换 - 您可以在不同的序列化版本之间分支代码。
答案 1 :(得分:3)
如果更改类的实现,但仍希望能够序列化/反序列化以“旧”格式保存的对象,则使用SerialVersionUID。所以这意味着你必须在子类中实现它,如果你想改变子类而不是超类。但是,如果您不需要这个“版本控制”,则根本不必使用SerialVersionUID。