Java可序列化:必须在ArrayList中可序列化<;E>;?
我有一个包含以下指定字段的类。我的问题是,Admin、Worker和所有其他自定义类必须实现可序列化才能使MyClass可序列化吗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
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
的内部状态。这始终是一种很好的做法,但对于可序列化的尤其如此