如果您的Serializable类包含一个不可序列化的成员会发生什么?你是如何解决的?

时间:2014-01-31 09:25:34

标签: java serialization

如果您的Serializable类包含不可序列化的成员,会发生什么? 你是如何解决的?

4 个答案:

答案 0 :(得分:0)

当您尝试Serialize时,它会抛出NotSerializableException。为避免这种情况,请将该字段设为transient字段。

private transient YourNonSerializableObject dontSerializeMe; // This won't be serialized

答案 1 :(得分:0)

除非声明字段transient(这将阻止字段序列化,即不会保存),否则该类将不可序列化。

如果可以,我建议将该成员设置为可序列化,否则您必须使用writeObjectreadObject手动编写和/或读取该字段。有关这些方法的信息,请参阅文档:http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html

答案 2 :(得分:0)

@ HashUser123:在您不想序列化的字段之前使用transient关键字。 例如:

private transient int salary;

答案 3 :(得分:0)

您的类的一个字段是一个未实现Serializable的类的实例,它是一个标记接口(无方法),告诉JVM它可以使用默认的序列化机制对其进行序列化。 / p>

如果该类的所有字段都是Serializable,那么很简单 - 只需将implements Serializable添加到类声明中。

如果没有,请重复该字段类的过程,依此类推到对象图中。

如果您点击了不能或不应该的课程,请Serializable,请将transient关键字添加到字段声明中。这将告诉JVM在执行Serialization时忽略该字段。