Java Serializable:必须在ArrayList <e>?</e>中可序列化

时间:2013-12-24 18:50:18

标签: java serializable

我有以下类包含下面指定的字段。我的问题是,Admin,Worker和我所有其他自定义类是否必须将Serializable for MyClass实现为Serializable?

public class MyClass implements java.io.Serializable {
  private static final long serialVersionUID = 1L;
  ArrayList<Admin> admins;
  ArrayList<Worker> workers;
  ArrayList<Manager> managers;
  ArrayList<Secretary> secretaries;
  ArrayList<Category> categories;
  HashMap<Issue, HashMap<Category,Manager>> ManagedIssues;
  private static MyClass instance;
      ...
}

5 个答案:

答案 0 :(得分:3)

  

我的问题是,Admin,Worker和我所有其他自定义类是否必须将Serializable for MyClass实现为Serializable?

是。他们必须是。

默认情况下,

ArrayList已经实现了Serializable接口。但是您需要为您正在使用的类型实现Serializable接口。

  

实现java.io.Serializable interface的类启用了类的可序列化。未实现此接口的类将不会将其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。

答案 1 :(得分:2)

正如其他人所说,如果一个类被标记为Serializable,那么内部的所有内容也需要标记为Serializable

但在这种情况下,你确实需要确保限制内部状态的可变性。换句话说,当在(构造函数或setter)中获取可变对象(如ArrayList)或返回它(在getter中)时,创建副本以保护MyClass的内部状态。这始终是一种很好的做法,尤其适用于Serializable

答案 2 :(得分:1)

如果您不希望序列化这些内容,请将其标记为transient

答案 3 :(得分:0)

如果你要创建一个可序列化的类,那么你必须确保该类中的所有内容都是可序列化的。所以你必须先将它们序列化。

答案 4 :(得分:0)

是的,但只有当列表/地图不为空时。在这种情况下,序列化机制将尝试序列化集合的内容。