Java新版本的开发已正式进入轨道,版本号18.3

Java 9在9月21日正式发布,同时Oracle宣布将Java新版本的发布周期调整为每半年一次。目前,Java新版本的开发也已正式进入轨道。就已公开的消息来看,下一个版本的Java预计会在2018年3月发布,版本号将会是18.3,已经规划加入的特性包括JEP 286和296。html

根据reddit站点上的讨论,首先更新的是JEP 296,Valhalla预计很快也会加入进来。OpenJDK的主页面则显示,已肯定要在18.3版本实现的是JEP 286和296。架构

JEP 296主要是将JDK仓库群(JDK Repository Forest)合并为一个仓库,旨在下降管理大量仓库群的成本。根据InfoQ以前的报道,该仓库群的合并已经完成。这些软件仓库是在OpenJDK发展史上历次分裂生成的,在OpenJDK 9及之前的版本中将会继续存在。在此次合并操做以前,OpenJDK曾分裂为多个不一样的Mercurial软件仓库群,这致使了许多问题,例如不能以原子方式对多个软件仓库应用漏洞修复(Bug Fixes)。在OpenJDK合并完成后,只会有一个软件仓库,并复制在三个开发线上。为了简化仓库的管理,JDK中还建立了用于在合并和未合并版本间移动更改的工具。函数

JEP 286提议在Java中引入局部变量的类型推断,该JEP在2016年提出,InfoQ曾经报道过该JEP的概况和相关的开发者调查结果。该JEP旨在减小编写Java代码相关的仪式性的内容,提高开发人员的体验,同时还要保证Java语言的静态性。它会减小开发人员在声明局部变量时,没有必要的变量类型声明。若是该JEP实现的话,在声明局部变量的时候,就能够采用相似以下的方式:工具

var list = new ArrayList(); // infers ArrayList
var stream = list.stream(); // infers Stream
这种语句只能用于带有初始化器(initializer)的局部变量、加强的for-loop中的索引以及传统for-loop中声明的局部变量。它不能用于方法声明、构造函数声明、方法返回值、字段、catch语句以及其余类型的变量声明中。oop

关于局部变量的类型推断,无论是JVM体系中的语言仍是其余语言都提供了必定形式的支持,好比C++(auto)、C#(var)、Scala(var/val)以及Go(经过:=进行声明)。至于该使用var做为关键字,仍是使用let或相似于C/C++中的auto做为关键字,以前曾经有过一个面向开发者的调查。大约84%的回答代表定义可变内容的变量用关键字var是恰当的,只有百分之几的回答者建议使用auto更合适。根据Java语言架构师Brian Goetz介绍,该功能应该使用关键词var。rest

关于该特性的用法,在reddit上有一些讨论。有人表示,即使在支持“auto”语法的语言中,该特性使用的也比较少,由于有些人但愿一眼就能看出变量的类型是什么。也有人认为,var有它的适用空间,在小的代码块中,直接用它实例化对象是能够的。若是是做为方法返回值的话,仍是但愿明确声明类型,Java的类型推断并不支持方法返回值,这一点倒没必要担忧。若是函数或代码块比较长的话,就不建议使用var了并要考虑适时进行代码的重写。时间和经验将会让咱们更加明确应该在什么时候使用新功能,就像Optional刚出现时,也是耗费了一些时间才明确其推荐适用场景。htm

Valhalla项目中包含了一些有趣的JEP,包括值类型(Value Type)、针对原始类型实现泛型功能、加强的volatile等,外界很期待这些内容最终也能添加到新版本中。对象

相关文章
相关标签/搜索