写点什么

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:005311

评论

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

云主机是什么?可以用来干嘛?

行云管家

云计算 云服务 云主机 云平台

微信业务架构

stars

架构训练营

Aeron是什么?

BUG侦探

Aeron

helm部署的es出现探针过不了的问题

ilinux

Python代码阅读(第46篇):寻找符合条件的元素

Felix

Python 编程 Code Programing 阅读代码

架构实战营学习记录

王斌

2021云栖大会|东方通正式加入阿里云云原生合作伙伴计划,强强联手共创国产数字化转型新风向!

阿里巴巴云原生

阿里云 云原生 合作共赢 云栖大会

英特尔公司CEO帕特·基辛格致开放生态系统的一封公开信

科技新消息

MongoDB技术实践与应用案例征集活动

MongoDB中文社区

mongodb

字节跳动Web Infra发起 Modern.js 开源项目,打造现代 Web 工程体系

字节跳动终端技术

字节跳动 大前端 开源技术

4个实验,彻底搞懂TCP连接的断开

Java 架构 TCP 后端 网络编程

招募令!焱融 SaaS 平台新产品招募100位体验官

焱融科技

云计算 分布式 高性能 文件存储 NAS

Kubernetes Operator 开发入门

侯生

Kubernetes operator #k8s

京东架构师珍藏版:redis深度笔记(全彩版)全篇精华,细节满满

收到请回复

redis 编程 面试 后端 计算机

Gartner发布《2021年企业低代码平台魔力象限》低码一体化平台成趋势!

优秀

低代码

二本渣渣的金九银十辛酸面试之旅:5 面阿里(Java岗) 侥幸上岸

Java 编程 程序员 架构 面试

CFI技术新探索,struct_san今日登场

腾讯安全云鼎实验室

云安全

小程序与 H5、原生应用的对比

Speedoooo

容器 信息安全 ios开发 APP开发 Andriod开发

每周学习感想

张靖

#架构实战营

落实等级保护工作的意义简单说明-行云管家

行云管家

网络安全 等保 等级保护 安全等级保护

事件管理CRM系统是活动策划工作的必要工具

低代码小观

CRM 管理系统 事件管理 CRM系统 活动策划

观察者网专访明道云CEO任向晖

明道云

架构实战营毕业总结

Abner S.

#架构实战营

利用守护线程隐式关闭线程池

FunTester

Java 线程池 接口测试 FunTester 守护线程

搭建springboot-tdengine 环境

williamcai

tdengine Spring Boot

1024 写给程序员的一些建议

Andy阿辉

编程 程序员 程序人生 程序 java;

四万字32图,Kafka知识体系保姆级教程宝典

五分钟学大数据

大数据 kafka

携手企业创新 共创美好未来——低代码助力企业数字化

明道云

终于有人把云原生存储讲明白了

青云技术社区

云计算 云原生 存储 Cloud Native

高校人才集聚飞桨启航菁英计划!百度联合中国图象图形学学会助力AI人才培养

百度大脑

人工智能 百度 图像

云智慧开源数据可视化编排平台—FlyFish

云智慧AIOps社区

开源 大前端 低代码 数据可视化 JavaScrip

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