看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!
Oracle 发布了新版本的 Java,即 Java 10 。这个版本距离 Java 9 的发布刚刚过去了六个月,和上个版本一样,它也是特性发布版本,其生命周期只有六个月。
随着Java 10 的发布,Java 9 随即被废止,以后不会再有Java 9 的免费支持版本发布。从3 月20 日开始,Oracle 免费支持的Java 版本是Java 8 和Java 10。下一个长期支持的版本将会是Java 11,预计会在2018 年九月份发布。
最终的发布版本与 RC1 候选版本几乎没有什么差别,从 InfoQ 2017 年 11 月报道发布内容之后,Java 10 并没有添加什么重要的特性。
关于该版本语言级别的变更,可以通过版本的完整文档和发布说明获取。
对于开发人员来说,一个重要的变更就是新增了 var
。这是对 Java 类型推断功能的增强,该特性已被证明比它刚刚出现的时候更为重要。在最简单的场景中,var
允许我们按照如下的方式编写代码:
var foo = new ArrayList<String>();
它将推断从值的类型转移到了变量中。
在 Java 10 中,该特性的实现是通过将var
作为保留类型名而不是作为关键字来实现的。这意味着,使用 var 作为变量名、方法或包名并不会受到影响。
除了简单的场景,它实际上还允许我们使用以前所不允许的编程结构。例如,javac
一直允许使用功能非常有限的类型推断形式:
public class Test { public static void main(String[] args) { (new Object() { public void bar() { System.out.println("bar!"); } }).bar(); } }
在 Java 7 出现之前,它的功能边界已经被 Java 社区所知晓。
这种形式的类型推断所面临的问题在于它没有办法实际应用,“具有 bar 方法的对象”存在于编译器中,但是该类型无法通过变量类型的方式来表述,它并不是 _ 可表示的类型 _。
随着 Java 10 的发布,变量的类型不再需要明确指定,var
能够避免明确表示类型,从而允许我们保留静态的类型信息。这意味着我们可以修改样例代码,编写成如下的样子:
var o = new Object() { public void bar() { System.out.println("bar!"); } }; o.bar();
将var
作为“魔力类型”来使用,允许程序员以某种方式保留每次类型推断的类型信息,这不禁让人联想到 Java 泛型的约束。
关于var
如何实现非表示性类型的更高级用法,可以参考该文章。尽管该特性无法满足每个批判者对Java 类型系统的质疑,但是它的确代表了一种坚定(可能也是谨慎的)的进步。
查看英文原文: Java 10 Released
评论