数组内的自定义类的对象是否会在序列化后保留其数据?

时间:2014-06-20 01:28:05

标签: java class serialization

我正在构建一个小型应用程序来保存某种统计数据。在我开始努力编写这个问题之前,我有一个普遍的问题。

假设我们有一个自己类的对象X,代表一个体育比赛。它有几个字段,其中有另一个对象Y - 也是它自己的类。 Y代表给定游戏的统计数据。结构应该是这样的:

class Match {
    Date date;
    String venue;
    ArrayList<Game>[10] gameList;
...
}

class Game{
    int result;
    int blah blah;
    ...
}

如果我去创建一些Match对象,例如存储在一个数组中,我可以序列化一个包含这个Matches数组的对象,但是当我反序列化它时,我能否将数据保存在里面比如游戏对象?我是否需要让每个类都使用Serializable?

我担心的原因是来自JAVA Api Documentation的那些行:

  

在反序列化期间,非可序列化类的字段将   使用公共或受保护的无参数构造函数初始化   类。必须可以访问子类的无参数构造函数   序列化。将恢复可序列化子类的字段   来自溪流。

     

遍历图形时,可能遇到没有的对象   支持Serializable接口。在这种情况下   将抛出NotSerializableException并将标识该类   不可序列化的对象。

2 个答案:

答案 0 :(得分:2)

是的,您需要将Match类序列化。创建类序列化意味着您需要使该类的所有实例变量也可序列化(请注意递归定义)。在您的示例中,要使Match类可序列化,您需要使Game类可序列化。

答案 1 :(得分:0)

我想这个词

  

非序列化类

意味着这样的类没有实现可序列化的接口,java中存在的类没有实现可序列化的接口,你不能将它们序列化,例如java.awt.BasicStroke你可以用&# #39; t直接序列化该类的任何实例