过去一年 Java 发生了许多变化,其中一部分原因在于推迟了一年的 Java 9 的推出。但是,随着时间的推移,人们发现,比起 Java 9 的推出,Java 版本发布周期的变更意义更为重大。
前段时间公布的 JDK 版本发布计划显示,Java 发布周期变更为每六个月一次,这意味着 2018 年 Java 将发布两个 Java 版本。第一个版本是 Java 10,第二个版本是 Java 11。
考虑到新版本的推出将严格遵循时间线,预计每个新版本发布的 Java 特性将比起之前有所缩减。也就是说,Java 10 的新特性会比之前版本的新特性要少。
之前的文章还对 Java 10 的新特性进行了解密。
至于 Java 11 将会有哪些新功能,目前还无法确定。我们只是将以下功能纳入了考虑范围内:
Epsilon。一种对 Null 垃圾回收算法的参考实现。
Dynamic Class File Constants 。一种主要针对软件库作者及使用动态特性(invokedynamic)的高级开发人员的平台特性。
随着发布日期临近,该特性列表后续一定会被补充。不过,该列表目前还未提及 Java 值类型。这也不奇怪,因为实现值类型需要对 Java 语言本身和运行时做出重大更新,还要对 Java 类型系统进行重构。
虽然当前原型已经工作,但要特性交付还需要花很长一段时间。当前的状态至适用于低级别的平台开发者,和一些惯于使用反射或 MethodHandle 工具的开发者。虽然值类型将作为 Java 11 的一部分发布,但 Oracle 尚未透露任何有关该特性预期发布时间的消息。
如果值类型并未作为 Java 11 特性发布,这将会产生连锁反应。包含值类型的首个长期支持(LTS)版本将不会在 2021 年 9 月前发布。
Java 11 中是否会有数据类(data classes)还不确定。Java 语言架构师 Brian Goetz 曾这样说道:
数据类将用于解决类的表示与 API 合约间存在的复杂间接关系。通过使用数据类,编译器可以填入一些普通类成员
数据类提案与 Scala 的 Case 类有些相似。Goetz 表示,数据类的设计可能会有一些变动,它的整体语义会比我们现在看到的更加深入。目前的数据类概念在开发过程中与模式匹配功能相联系,但是它们有可能在不同的版本中提供。
与以上两个特性相关的是,未来可能会对Switch 形式做改进,Switch 语句块将可作为表达式或声明使用。该特性有望在 Java 11 实现,但目前看来,仍然是一个 JEP 草案。
预定在 9 月发布的版本,其特性全部完成时间是 2018 年 6 月。因此,我们还需要等待数月,才能看到 Java 11 的整体形态。