【问题标题】:Serializable a object properties too也可序列化对象属性
【发布时间】:2012-10-22 11:22:47
【问题描述】:
当我在类中有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{
// ...
}
【问题讨论】:
标签:
java
serializable
object-serialization
【解决方案1】:
是的,你知道;如果您的类Task 和Role 不是Serializable,如果您尝试序列化User 的实例,您将获得java.io.NotSerializableException。
当然,如果Task 或Role 包含其他非原始、非瞬态字段,它们也必须是Serializable,等等。
【解决方案2】:
这是最简单的选择。
另一种选择是使这些字段瞬态并“覆盖” writeObject 和 readObject 以实现您自己的这些类的序列化。这不太可能值得付出额外的努力。
顺便说一句:如果您有一个嵌套类,则外部类需要是可序列化的,并且即使您不使用嵌套类,它也会隐式引用它。出于这个原因和其他原因,我建议尽可能制作嵌套类 static。
【解决方案3】:
简短回答:是的。
可序列化类中的每个对象都必须自己可序列化。否则无法恢复所有属性或其他任何内容。
此外,您在尝试序列化此对象时也会遇到异常。
【解决方案5】:
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