写点什么

Java 新版本的开发现状

  • 2017-11-02
  • 本文字数:1446 字

    阅读完需:约 5 分钟

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

根据 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<string>(); // infers ArrayList<string>
var stream = list.stream(); // infers Stream<string></string></string></string>

这种语句只能用于带有初始化器(initializer)的局部变量、增强的 for-loop 中的索引以及传统 for-loop 中声明的局部变量。它不能用于方法声明、构造函数声明、方法返回值、字段、catch 语句以及其他类型的变量声明中。

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

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

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


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-11-02 19:004832

评论

发布
暂无评论
发现更多内容

浙江宁波市区块链研究机构发布首个全国性公证联盟运营链

CECBC

区块链

GitHub开源的中国亲戚关系计算器

不脱发的程序猿

GitHub 开源 程序员 4月日更 中国亲戚关系

流水线成功涨薪到年薪30W 只有努力才能成功

学Java关注我

Java 架构 程序人生 编程语言

带你温习一下webpack配置

IT皮皮蟹

npm nodejs webpack

聪明人的训练(三十)

Changing Lin

4月日更

让电影票房飞一会儿,五一换个姿势重温经典

华为云开发者联盟

音视频 电影修复 视频超分 媒体处理 混合失真

软件 IT专业的高校大学生是否写文调查问卷

Bob

问卷调查 行业分析能力考核 高校大学生 写文

云图说|ModelArts Pro,为企业级AI应用打造的专业开发套件

华为云开发者联盟

AI 企业应用 ModelArts Pro 开发套件

yarn的applicationMaster介绍

五分钟学大数据

YARN

Boss直聘转发超100W次Java面试突击手册 火遍全网

比伯

Java 编程 程序员 架构 计算机

5月日更,InfoQ 高定T-恤,达标来领~

InfoQ写作社区官方

5月日更 热门活动

抵制羊毛党,图计算“加持”互联网电商风控

华为云开发者联盟

风控 图计算 互联网电商 羊毛党

飞桨中国行落地合肥,与当地企业共话产业智能化升级

百度大脑

智能化 飞桨中国行

CloudQuery v1.3.7版本更新,新增「导出限制」

BinTools图尔兹

数据库 sql 数据安全 数据库管理

阿里码农肝了2晚,整理的Java语法总结,网友:考试复习全靠它了

飞飞JAva

参加人气创作者的一些感悟

石云升

28天写作 4月日更 1 周年盛典

SpringCloud-技术专题-Feign组件基本使用(1)

洛神灬殇

Configuration Hystrix spring-cloud Fegin Ribbon

什么,你管这叫“线程安全”?

Java大蜗牛

Java 程序员 编程语言 后端 线程安全

博睿数据DataView标准化指标管理,助力企业快速制定SLO

博睿数据

数据中台 博睿数据 dataview

弱密码会毁灭物联网(IoT)吗?

龙归科技

密码管理

科技赋能 博睿数据引领教育行业走入“服务可达”时代

博睿数据

在线教育 博睿数据 服务可达

迪安精选:那些好用的浏览器扩展

迪安

浏览器 插件 扩展

群英荟萃 | UINO优锘科技ThingJS平台亮相华为开发者大会

ThingJS数字孪生引擎

物联网 3D可视化 数字孪生

云原生除了K8S、微服务,还有...?

云计算

让宝妈宝爸告别安全顾虑,区块链构建母婴行业新生态

CECBC

母婴

新人小白福利来啦!精简版java知识总结,阿里P8大牛看完都说绝了

牛哄哄的java大师

Java

量化策略倍投系统搭建,马丁策略交易

SpringSecurity+JWT认证流程解析

学Java关注我

Java 编程 程序人生 计算机 架构】

2.8W字Java基础学习和书籍推荐,真正意义上的从0到1学Java,才不是培训机构那种大纲文

北游学Java

面向对象 线程 集合 java基础 IO流

我与写作平台的初次接触

Aldeo

1 周年盛典 我和写作平台的故事

极光开发者周刊【No.0430】

极光JIGUANG

Java新版本的开发现状_Java_张卫滨_InfoQ精选文章