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

10-10 16:04