gpt4 book ai didi

java - 为什么我没有得到 NotSerializableException?

转载 作者:行者123 更新时间:2023-12-04 21:15:48 24 4
gpt4 key购买 nike

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 接口(interface)的类!到底发生了什么?

最佳答案

因为该字段为空。并且 null 可以很好地序列化。

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com