假设我有一个Java类MyClass
,它没有从任何类继承。 MyClass
实现Serializable
。MyClass
是否可以在没有其他条件的情况下成为Serializable
?
是否取决于MyClass
包含哪些对象,以及这些对象本身是否为Serializable
?
例如,在下面的类中,如果Mappedoodle2
不实现Serializable
,则在序列化Mappedoodle
时会出现异常吗?
import java.io.Serializable;
public class Mappedoodle implements Serializable {
private static final long serialVersionUID = -1760231235147491826L;
private String text;
private int value;
private Mappedoodle2 mm = new Mappedoodle2();
public Mappedoodle(String text, int value) {
this.text = text;
this.value = value;
}
public String getText() {
return text;
}
public int getValue() {
return value;
}
@Override
public String toString() {
return text + ", " + value;
}
}
最佳答案
要序列化对象,我假设您正在使用ObjectOutputStream
。以下是一些相关文档:http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html#writeObject(java.lang.Object)
该部分描述了如何编写对象的基础知识。该流写入以下内容:
对象所在的类
签名(public class Mappedoodle implements Serializable
)
所有既不是transient
也不是static
的字段
作为对象的每个字段也将写入流中。这意味着每个字段都必须实现Serializable
。如果没有,您将得到一个NotSerializableException
。
您可以通过以下两种方法进行这项工作:
使Mappedoodle2
可序列化
将字段设置为mm
transient
,这仅表示不会序列化。
关于java - 可序列化的条件是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30947504/