2012-10-22 88 views
3

当我在一个类中有Serializable时,是否需要将Serializable添加到类中的所有对象?可序列化的对象属性

例如,

public class User implements Serializable{ 

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

我是否需要添加到SerializableRoleTask,太?

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

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

请问她在规格中看起来真的很容易吗? –

+0

还检查这一点,那将有助于你 http://stackoverflow.com/questions/285793/what-is-a-serialversionuid-and-why-should-i-use-it – Suranga

回答

6

是的,你确实;如果您的类TaskRole不是Serializable,如果您尝试序列化User的实例,则会得到java.io.NotSerializableException

Ofcourse,如果TaskRole含有其他非原始的,非瞬态字段,他们将不得不Serializable太等

+0

又是怎么回事像这样: – nimo23

1

简短的回答:。 你的可序列化类的每个对象必须是可以自行序列化的。否则,所有的属性不能恢复或任何。

此外,尝试序列化此对象时也会发生异常。

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参考将在运行时抛出

3

这是最简单的选择。

另一种方法是让这些字段变为tranivent并“覆盖”writeObject和readObject以实现您自己的这些类的序列化。这是不值得的额外努力是不值得的。

顺便说一句:如果你有一个嵌套类,外部类需要是可序列化的,以及嵌套类隐式地引用它,即使你不使用它。出于这个原因和其他人,我建议尽可能使嵌套类static

+0

+ 1的另一种方法。 –

1

从DOC

类不实现此接口不会有任何其状态的序列化或反序列化。

所以是的。

Please read

相关问题