4

当我Serializable在课堂上时,我需要添加Serializable到课堂内的所有对象吗?

例如,

public class User implements Serializable{

private List<Role> role;
private Task task;
}

我也需要添加SerializableRoleandTask吗?

public class Task implements Serializable{
    // ...
}

public class Role implements Serializable{
    // ...
}
4

5 回答 5

6

是的你是; 如果您的类Task不是RoleSerializable如果java.io.NotSerializableException您尝试序列化User.

当然,如果TaskRole包含其他非原始、非瞬态字段,它们也必须Serializable如此,等等。

于 2012-10-22T11:24:19.203 回答
3

这是最简单的选择。

另一种选择是使这些字段瞬态并“覆盖” writeObject 和 readObject 以实现您自己的这些类的序列化。这不太可能值得付出额外的努力。

顺便说一句:如果您有一个嵌套类,则外部类需要是可序列化的,并且即使您不使用嵌套类,它也会隐含地引用它。static出于这个原因和其他原因,我建议尽可能制作嵌套类。

于 2012-10-22T11:25:03.243 回答
1

简短的回答:的。可序列化类中的每个对象都必须自己可序列化。否则无法恢复所有属性或其他任何内容。

此外,您在尝试序列化此对象时也会遇到异常。

于 2012-10-22T11:24:43.133 回答
1

可序列化 是的,因为:

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则将在运行时抛出a

于 2012-10-22T11:25:02.937 回答
1

来自文档

未实现此接口的类将不会对其任何状态进行序列化或反序列化。

所以是的。

请阅读

于 2012-10-22T11:27:00.297 回答