Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 序列化和子类_Java_Android_Serialization - Fatal编程技术网

Java 序列化和子类

Java 序列化和子类,java,android,serialization,Java,Android,Serialization,如果我将一个类定义为可序列化的,那么当我创建一个子类时,它会要求我定义一个serialVersionUID。这是必需的还是可以依赖于super类中的对象?如果您更改了类的实现,但仍希望能够序列化/反序列化以“旧”格式保存的对象,则会使用SerialVersionId。这意味着如果你想改变子类而不是超类,你也必须在子类中实现它。但是,如果您不需要此“版本控制”,则根本不必使用SerialVersionUID。我曾经在单独的(可能是顶级类)中声明一次SerialVersionUID,如: 然后在每个

如果我将一个类定义为可序列化的,那么当我创建一个子类时,它会要求我定义一个serialVersionUID。这是必需的还是可以依赖于super类中的对象?

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

我曾经在单独的(可能是顶级类)中声明一次SerialVersionUID,如:

然后在每个
Serializable
类中声明:

private static final long serialVersionUID = MyTopClass.GlobalSerialVersionUID;

这种方法将保证您始终拥有相同的SerialVersionUID,如果您要在不同的序列化版本之间实现数据交换,您可以在不同的序列化版本之间分支代码。

在这种情况下,我是否覆盖警告而根本不定义它?如果是这样,当我更新我的应用程序并且它试图恢复由于上一次保存而产生的捆绑包时会发生什么?是的,您会覆盖它。但是,如果捆绑包是使用早期版本保存的,则无法从捆绑包中恢复。我不确定你是否会得到一个异常或只是没有加载对象。您可以在此处阅读有关序列化的内容:
private static final long serialVersionUID = MyTopClass.GlobalSerialVersionUID;