【问题标题】:Will objects of a custom class, inside an array, keep their data after serialization?数组内的自定义类的对象会在序列化后保留它们的数据吗?
【发布时间】: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&lt;Game&gt;[10] 是个坏主意。泛型不适用于数组。此外,如果您已经在使用集合,那么为什么要使用数组? List&lt;List&lt;Game&gt;&gt; 不是更简单吗?此外,如果您想让某个类的实例被序列化,最简单的方法是让该类实现Serializable 接口。
  • 我知道我需要使用 Serializable 接口。一般来说 - 我知道如何序列化一个对象。我的问题更像是如果里面的这个对象有一个数组,它包含其他自定义类类型的对象,会发生什么?我也需要使它们可序列化吗?
  • 是的,你有。您使用 ArrayList 的存储桶是可序列化的,但是当它存储不可序列化的类时,反序列化后将变为空。

标签: java class serialization


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我猜这个词

    不可序列化的类

    表示这样的类没有实现可序列化接口在java中存在的类没有实现可序列化接口并且你不能序列化它们例如java.awt.BasicStroke你不能直接序列化这个类的任何实例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      • 2020-07-05
      • 1970-01-01
      • 2016-11-03
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多