我有一个没有实现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.}
}
答案 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
的引用将