跳到主要内容

JEP 211:消除导入声明中的弃用警告

概括

从 Java SE 8 开始,Java 编译器需要根据 Java 语言规范的合理解释,在按名称导入已弃用的类型或静态导入已弃用的成员(方法、字段、嵌套类型)时发出弃用警告。这些警告没有提供任何信息,不应被要求。应保留实际使用已弃用成员时的弃用警告。

目标

此 JEP 的目标是帮助大型代码库清除 lint 警告。@SuppressWarnings与在代码中使用已弃用的成员不同,无法使用注释来抑制导入时的弃用警告。在像 JDK 这样的大型代码库中,已弃用的功能通常必须支持一段时间,并且如果已弃用的构造的所有使用都是有意且被禁止的,则仅导入已弃用的构造并不能证明警告消息是合理的。

非目标

该 JEP 的目标并不是真正解决 JDK 代码案例中的所有弃用警告。但是,这可能是 JDK 9 中单独维护工作的一部分。

描述

从规范的角度来看,所需的更改很小。在 JLS 8 中,有关部分@Deprecated指出:

@Deprecated当在显式或隐式声明的构造中使用(覆盖、调用或按名称引用)其声明注释的类型、方法、字段或构造函数时,Java 编译器必须生成弃用警告,除非:

  • 该使用是在本身用注释进行注释的实体内@Deprecated;或者
  • 在带注释的实体内使用,以通过注释抑制警告@SuppressWarnings("deprecation");或者
  • 使用和声明都在同一个最外层类中。

规范更改类似于添加另一个项目符号来说明附加排除:

  • 使用是在import声明内。

javac参考实现中,在查找弃用警告时,将进行一个简单的检查以跳过导入语句。

测试

正常的单元测试应该足以测试此功能。一些 JCK 测试可能需要针对更改后的规范进行更新。