2

可能重复:
为什么可序列化的内部类不可序列化?

我有一个没有实现的类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.}
} 
4

2 回答 2

6

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

尝试制作课程static

于 2013-01-09T17:03:28.720 回答
3

如果你反编译你的 main.class 你会在真实的代码中看到

public class main {

    class data implements Serializable {
        final main this$0;

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

data包含对其外部类的引用main。这个所谓的合成字段是由 javac 添加的。当 ObjectOutputStream 尝试序列化数据时,它偶然发现对不可序列化类的引用并中断。因此,要可序列化,您也应该main实现 Serializable,或者创建data静态类,然后引用main将去

于 2013-01-09T17:07:43.720 回答