NotSerializableException

NotSerializableException

class NotSerializable {}

class MyClass implements Serializable {
   private NotSerializable field; // class NotSerializable does not implement Serializable!!
}

public class Runner {
   public static void main(String[] args) {
      MyClass ob = new MyClass();

      try {
         FileOutputStream fs = new FileOutputStream("testSer.ser");
         ObjectOutputStream os = new ObjectOutputStream(fs);
         os.writeObject(ob);
         os.close();
      } catch (IOException e) {
          e.printStackTrace();
      }

      try {
         FileInputStream fis = new FileInputStream("testSer.ser");
         ObjectInputStream ois = new ObjectInputStream(fis);
         MyClass copyOb = (MyClass) ois.readObject();
         ois.close();
      } catch (Exception e) {
          e.printStackTrace();
      }
   }
}


该程序正确执行并成功序列化对象ob。但是我希望在运行时获取java.io.NotSerializableException。因为MyClass具有未实现Serializable接口的类的引用!到底是怎么回事?

最佳答案

因为该字段为空。而且null可以序列化就可以了。

序列化机制检查每个字段的实际,具体类型,而不是其声明的类型。您可能有一个NotSerializable子类的实例,该实例是Serializable,然后也可以很好地进行序列化。如果不是这种情况,例如,您将无法序列化具有成员类型为List的任何对象,因为List没有实现Serializable。

关于java - 为什么没有收到NotSerializableException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17684609/

10-12 04:53