摘自Serialized接口的JavaDoc第二段:
为了允许不可序列化类的子类型被序列化, 子类型可能承担保存和恢复状态的责任 超类型的 public、protected 和(如果可访问)包 字段。仅当类 它扩展了一个可访问的无参数构造函数来初始化 类的状态。如果出现以下情况,则声明类可序列化是错误的 事实并非如此。该错误将在运行时被检测到。
为什么编译时检测不到这个错误?
编译器旨在根据语言的要求而不是单个库来检查代码。可以更改语言以添加执行额外检查的关键字或注释,理论上图书馆可以使用这些。
如果编译器能够以加载注释(目前纯粹是数据)的方式运行特定于库的检查代码,那么有用的是,这样就可以在编译时执行额外的检查,而无需知道任何单个库的行为。