接口实现和Java序列化

接口实现和Java序列化,java,android,serialization,serializable,Java,Android,Serialization,Serializable,假设您具有以下结构(简化): 稍后,您将添加一个新的实现: class Impl3 implements Inter, Serializable { private static final long serialVersionUID = ...; //... } …并最终得到MyClass.interInstance可以假定的三个类 这对已经序列化的MyClass对象是否有任何影响 我这样问是因为用户(Android应用程序)一直在抱怨在更新后无法打开一些序列化对象,在更新中,更

假设您具有以下结构(简化):

稍后,您将添加一个新的实现:

class Impl3 implements Inter, Serializable
{
   private static final long serialVersionUID = ...;
   //...
}
…并最终得到MyClass.interInstance可以假定的三个类

这对已经序列化的MyClass对象是否有任何影响

我这样问是因为用户(Android应用程序)一直在抱怨在更新后无法打开一些序列化对象,在更新中,更改模仿了上述示例(即,我只添加了一个新的可序列化接口实现)

这对已经存在的MyClass对象是否有任何影响 连载

我对你的问题有点困惑,但如果对象被序列化为Impl1或Impl2,而你试图反序列化为Impl3,那么这就行不通了。所以结论是,当您将对象序列化为Impl1时,必须将其反序列化为Impl1


顺便说一句,特别是在Android中——官方支持的,也是推荐的方法,如何“序列化”任何类型的对象是对接口的使用。还有。

我的意思是,在MyClass(interInstance)中可以有一个字段,可以是Impl1或Impl2(都可以序列化)。稍后添加第三个实现(Impl3),现在MyClass实例中的interInstance可以是Impl1、Impl2或Impl3。问题是,当从Impl3存在之前创建的文件中读取序列化对象时,此添加是否会产生影响。@user1987392这取决于影响的含义。序列化对象不会被更改,但我如何编写。如果将对象序列化为Impl2,则必须将其反序列化为Impl2,而不是Impl3。所谓影响,我的意思是ObjectInputStream是否仍然能够读取序列化对象的interInstance为Impl1或Impl2的(旧)文件。@user1987392我想不会有问题。
class Impl3 implements Inter, Serializable
{
   private static final long serialVersionUID = ...;
   //...
}