Serializable有哪些条件?

时间:2015-06-19 21:26:06

标签: java serializable

假设我有一个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;
   }

}

2 个答案:

答案 0 :(得分:1)

要序列化对象,我假设您使用的是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,这意味着它不会被序列化。

答案 1 :(得分:0)

首先,所有类在技术上都从java.lang.Object延伸,所以即使MyClass也会继承它。

MyClass只需实现接口即可实现Serializable,就像任何其他接口一样。如果一个类包含实现Serializable的类的属性,则父类不需要自己实现Serializable