2011-01-10 46 views
1

我有下面的类层次结构序列化,编译和字节代码生成

ParentInterface 

     | 
     v 
    ParentClass 

    / \ 
     v  v 

    SubClass1 SubClass2 

接口不扩展Serializable接口的类都实现Serializable接口为好。所有的类都被编译并打包成一个jar文件。

现在,我改变了ParentInterface,使它延伸了Serializable接口。在此之后,我只替换jar中的ParentInterface.class文件。

我有一些代码,我试图序列化一个实例SubClass1SubClass2。当试图序列化时,我得到NotSerializableException

我假设,如果我再次编译了所有的类并将它们替换到我的jar中,它就会起作用。如果我只更换ParentInterface怎么了?

+3

不要认为它会对重新编译起作用 - 尝试一下并找出答案。 – skaffman 2011-01-10 10:23:09

回答

1

可序列化类的所有子类本身都是可序列化的。

根据JavaDoc中的SubClass1和SubClass2应该是序列化的。除非他们有一些领域,是不是序列化。

仔细检查SubClass1SubClass2内的字段的可串行性。

1

这可能帮助..

SubClass1SubClass2将定义可序列化

然而,由于建议特别注意同时包含在SubClass1SubClass2领域。注意JDK中描述的以下限制。

在反序列化过程中,不可序列化类的字段将使用该类的public或protected no-arg构造函数进行初始化。一个无参数的构造函数必须可以被序列化的子类访问。序列化子类的字段将从流中恢复。

确保将“不可序列化”字段设置为瞬态或按照适当的方式进行操作。