序列化,编译和字节码生成

时间:2011-01-10 10:20:43

标签: java serialization compilation

我有以下类层次结构

  ParentInterface

        |
        v
    ParentClass

       /    \ 
      v      v 

  SubClass1   SubClass2

接口不扩展Serializable接口,并且所有类都没有实现Serializable接口。所有类都被编译并打包到一个jar文件中。

现在,我更改了ParentInterface,以便扩展Serializable界面。在此之后,我只替换jar中的ParentInterface.class文件。

我有一些代码,我正在尝试序列化SubClass1SubClass2的实例。在尝试序列化时,我得到NotSerializableException

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

,那有什么不对

2 个答案:

答案 0 :(得分:1)

  

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

根据JavaDoc,SubClass1和SubClass2应该是可序列化的..除非它们有一些不可序列化的字段

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

答案 1 :(得分:1)

这可能会有所帮助..

根据定义,

SubClass1 SubClass2 可序列化

但是,建议您特别注意 SubClass1 SubClass2 中包含的字段。注意JDK中描述的以下限制。

  

在反序列化期间,将使用类的public或protected no-arg构造函数初始化非可序列化类的字段。必须可以对可序列化的子类访问no-arg构造函数。可序列化子类的字段将从流中恢复。

请务必将“不可序列化”字段设为 transient 或采取适当行动。