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 インターフェイスを実装していないクラスを参照しているためです。本当に何が起こっているのですか?