跳到主要内容

JEP 213:磨砺项目硬币(Milling Project Coin)

QWen Max 中英对照

概述

作为 JDK 7 / Java SE 7 的一部分,Project Coin / JSR 334 中包含的小型语言变更在实际使用中易于操作且效果良好。然而,一些修正案可以解决这些变更中的不足之处。此外,自 Java SE 8 起,将下划线 ("_") 用作标识符会生成警告,而在 Java SE 9 中应将其改为错误。还提议允许接口拥有私有方法。

非目标

本 JEP 并未提议开展“Coin 2.0”活动,也未普遍征求新的语言提案。

描述

针对 Java 编程语言提出了五个小的修正:

  1. 允许在私有实例方法上使用 @SafeVargs@SafeVarargs 注解只能应用于不能被重写的方法,包括静态方法和最终实例方法。私有实例方法是 @SafeVargs 可以适应的另一个用例。

  2. 允许在 try-with-resources 语句中将实际上为 final 的变量用作资源。Java SE 7 中 try-with-resources 语句的最终版本要求为语句管理的每个资源声明一个新的变量。这是对早期功能迭代的更改。JSR 334 公开评审草案 讨论了从早期草案评审 版本的 try-with-resource 更改的理由,之前的版本允许语句管理表达式。JSR 334 专家组支持对 try-with-resources 进行进一步改进:如果资源由 final 或实际上为 final 的变量引用,则 try-with-resources 语句可以管理资源而无需声明新变量。这种由 try-with-resources 语句管理的受限表达式避免了促使删除通用表达式支持的语义问题。当时专家组确定这一改进时,发布时间表中没有足够的时间来容纳这一变更。

  3. 如果推断类型的参数类型是可表示的,则允许在匿名类中使用菱形语法。因为在 Java SE 7 中,使用菱形语法与匿名类构造函数推断出的类型可能超出了签名属性支持的类型集合,所以不允许在匿名类中使用菱形语法。正如 JSR 334 提议的最终草案 中所指出的,如果推断出的类型是可表示的,则可以放宽此限制。

  4. 完成从合法标识符名称集中移除下划线的工作,该工作始于 Java SE 8

  5. 接口中的私有方法支持曾短暂考虑纳入 Java SE 8,作为添加 Lambda 表达式支持的一部分,但为了更好地专注于 Java SE 8 的高优先级任务而撤回。现在建议对接口中的私有方法支持进行处理,从而使得接口的非抽象方法之间可以共享代码。

在 Java 语言变更的范畴内,这些改进是非常小的改动。@SafeVarags 的变更可能仅仅涉及修改规范中的一两句话,并在 javac 中进行规模相似的调整。然而,与任何 Java 语言的变更一样,必须谨慎处理平台中所有需要更新的部分。

测试

这些语言更改将需要为 javac 进行常规的单元测试和回归测试。JCK 编译器套件也需要更新,包括正面测试和负面测试。