Java,序列化,您可以序列化类中的类

时间:2013-01-09 16:57:25

标签: java

  

可能重复:
  Why is a serializable inner class not serializable?

我有一个没有实现Serializable的课程。在该类的内部,我有一个数据类,它保存整个程序的数据,该程序实现Serializable并具有版本ID。

我的问题是,当我尝试在我的主类中序列化数据对象时,我从主类而不是数据类中获取对象写入错误。主类没有实现Serializable

您可以在非序列化类中序列化一个类吗?

示例:

class main
{
   class data implements Serializable
   {  // data and functions }

   public void main(args)
   { data d = new data();
     // ofcourse I have the proper inits and checks for the output stream and such
     writeObject(data);  // Throws Class not Serializable error.}
} 

2 个答案:

答案 0 :(得分:5)

由于data不是static,它隐式地引用了它的外部类main,它不是可序列化的。

尝试制作课程static

答案 1 :(得分:3)

如果您反编译了main.class,您会在实际代码中看到

public class main {

    class data implements Serializable {
        final main this$0;

        data() {
            this$0 = main.this;
        }
    }
}

data包含对其外部类main的引用。这个所谓的合成字段由javac添加。当ObjectOutputStream试图对数据进行serizalize时,它会偶然发现对非可序列化类的引用并中断。因此要进行序列化,您应该main实现Serializable,或者使data为静态类,然后对main的引用将