Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java可序列化:必须在ArrayList中可序列化<;E>;?_Java_Serializable - Fatal编程技术网

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

Java可序列化:必须在ArrayList中可序列化<;E>;?,java,serializable,Java,Serializable,我有一个包含以下指定字段的类。我的问题是,Admin、Worker和所有其他自定义类必须实现可序列化才能使MyClass可序列化吗 public class MyClass implements java.io.Serializable { private static final long serialVersionUID = 1L; ArrayList<Admin> admins; ArrayList<Worker> workers; ArrayLis

我有一个包含以下指定字段的类。我的问题是,Admin、Worker和所有其他自定义类必须实现可序列化才能使MyClass可序列化吗

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;
      ...
}
公共类MyClass实现java.io.Serializable{
私有静态最终长serialVersionUID=1L;
ArrayList管理员;
ArrayList工人;
ArrayList经理;
阿雷亚主义秘书;
阵列列表类别;
HashMap管理讨论;
私有静态MyClass实例;
...
}
我的问题是,Admin、Worker和所有其他自定义类必须实现可序列化才能使MyClass可序列化吗

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;
      ...
}
对。他们一定是

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

类的可序列化性由实现的类启用。未实现此接口的类的任何状态都不会序列化或反序列化。可序列化类的所有子类型本身都是可序列化的


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

如果要使类可序列化,则必须确保该类中的所有内容也可序列化。因此,您必须首先使它们可序列化。

是的,但前提是这些列表/映射不是空的。在这种情况下,serialization mechanizm将尝试序列化集合的内容。

如其他人所述,如果一个类被标记为可序列化,那么内部的所有内容也需要标记为可序列化

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