当我在课程中有Serializable
时,是否需要将Serializable
添加到课程中的所有对象中?
例如,
public class User implements Serializable{
private List<Role> role;
private Task task;
}
我是否还需要将Serializable
添加到Role
和Task
?
public class Task implements Serializable{
// ...
}
public class Role implements Serializable{
// ...
}
答案 0 :(得分:6)
是的,你这样做;如果您的课程Task
和Role
不是Serializable
,那么如果您尝试序列化java.io.NotSerializableException
的实例,则会获得User
。
当然,如果Task
或Role
包含其他非原始的非瞬态字段,则它们也必须是Serializable
等。
答案 1 :(得分:3)
这是最简单的选择。
另一个选项是使这些字段变为tranisent并“覆盖”writeObject和readObject以实现这些类的自己的序列化。这不值得付出额外的努力。
BTW:如果你有一个嵌套类,外部类需要是Serializable,并且嵌套类隐式地引用它,即使你不使用它。出于这个原因和其他人,我建议尽可能使用嵌套类static
。
答案 2 :(得分:1)
简答:是。 您的可序列化类中的每个对象必须可以自行序列化。否则,所有属性都无法恢复或等等。
此外,在尝试序列化此对象时也会出现异常。
答案 3 :(得分:1)
Serializable 是的,因为:
Classes that do not implement this interface will not have any of their state
serialized or deserialized. All subtypes of a serializable class are themselves
serializable. The serialization interface has no methods or fields and serves
only to identify the semantics of being serializable.
如果您尝试序列化实现Serializable的类的对象,但该对象包含对非Serializable类的引用,那么将在运行时抛出NotSerializableException
答案 4 :(得分:1)