【问题标题】:Why can't the compiler detect this error regarding Serializable declaration at compile time?为什么编译器不能在编译时检测到关于 Serializable 声明的这个错误?
【发布时间】:2012-08-17 13:44:00
【问题描述】:

来自JavaDoc of Serializable接口的第二段:

为了允许序列化不可序列化类的子类型, 子类型可能承担保存和恢复状态的责任 超类型的公共、受保护和(如果可访问)包的 字段。只有当类 它扩展了一个可访问的无参数构造函数来初始化 类的状态。如果这样声明一个类 Serializable 是错误的 并非如此。将在运行时检测到错误。

为什么编译时检测不到这个错误?

【问题讨论】:

  • 编译器强制执行 JLS 中的规则。该规则在特定类的 Javadoc 中。

标签: java exception serialization compiler-construction


【解决方案1】:

编译器旨在根据语言要求检查代码,而不是单个库。可以更改语言以添加执行额外检查的关键字或注释,并且库可以在理论上使用这些。

如果编译器能够以加载注释(目前是纯粹的数据)的方式运行库特定的检查代码,那么这将是有用的,这样可以在编译时执行额外的检查而不知道任何单个库的行为.

【讨论】:

  • 您能否更具体地解释一下您的第二段“如果编译器能够以加载注释的方式运行特定于库的检查代码(目前是纯数据),那将很有用”
  • 您可以有引用类名并包含值的注释。编译器可以使用此注解在编译时运行库中的代码,因为javac 在 JVM 中运行,并且它可以在自定义类加载器中调用任何库中的特定例程。这将允许库的开发人员添加编译时检查或编译时代码注入,而无需对语言进行重大更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
  • 2016-05-13
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
相关资源
最近更新 更多