【发布时间】:2014-06-20 21:40:55
【问题描述】:
我正在构建一个小型应用程序来保存某种统计数据。在我开始认真编码之前,我有一个一般性问题。
假设我们有一个属于自己类的对象 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 的那些行:
在反序列化期间,不可序列化类的字段将 使用公共或受保护的无参数构造函数初始化 班级。子类必须可以访问无参数构造函数 可序列化的。可序列化子类的字段将被恢复 来自流。
在遍历图时,可能会遇到不 支持可序列化接口。在这种情况下 NotSerializableException 将被抛出,并将识别 不可序列化的对象。
【问题讨论】:
-
ArrayList<Game>[10]是个坏主意。泛型不适用于数组。此外,如果您已经在使用集合,那么为什么要使用数组?List<List<Game>>不是更简单吗?此外,如果您想让某个类的实例被序列化,最简单的方法是让该类实现Serializable接口。 -
我知道我需要使用 Serializable 接口。一般来说 - 我知道如何序列化一个对象。我的问题更像是如果里面的这个对象有一个数组,它包含其他自定义类类型的对象,会发生什么?我也需要使它们可序列化吗?
-
是的,你有。您使用 ArrayList 的存储桶是可序列化的,但是当它存储不可序列化的类时,反序列化后将变为空。
标签: java class serialization