繁体   English   中英

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

[英]Java Serializable: Must E be serializable in ArrayList<E>?

我有以下类包含下面指定的字段。 我的问题是,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;
      ...
}

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

是。 他们必须是。

默认情况下, ArrayList已经实现了Serializable接口。 但是您需要为您正在使用的类型实现Serializable接口。

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

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

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

是。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM