可序列化对象属性

时间:2012-10-22 11:22:47

标签: java serializable object-serialization

当我在课程中有Serializable时,是否需要将Serializable添加到课程中的所有对象中?

例如,

public class User implements Serializable{

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

我是否还需要将Serializable添加到RoleTask

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

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

5 个答案:

答案 0 :(得分:6)

是的,你这样做;如果您的课程TaskRole不是Serializable,那么如果您尝试序列化java.io.NotSerializableException的实例,则会获得User

当然,如果TaskRole包含其他非原始的非瞬态字段,则它们也必须是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)

来自doc

  

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

是的。

Please read