HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

评论

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

那些被忽视的Python核心功能...

互联网工科生

Python

加速中产 “返贫” 的4个迹象

博文视点Broadview

基于PINN的传播动力学研究

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

AREX 如何支持 Dubbo 自定义私有协议的录制回放

AREX 中文社区

dubbo 自动化测试 流量回放 流量录制

JMeter源码解析之结果收集器

优测云服务平台

Jmeter 性能测试 压力测试 #性能测试

Flink 实践教程:入门(12):元数据的使用

腾讯云大数据

流计算 Oceanus

斩获可信云最佳实践,天翼云存储资源盘活系统助力“一云多芯”!

天翼云开发者社区

云计算 存储

那些 MySQL 8.0 中的隐藏特性

爱可生开源社区

MySQL 8.0

带你走进数仓大集群内幕丨详解关于作业hang及残留问题定位

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

为什么要推进“电子凭证会计数据标准化”?

用友BIP

电子凭证

阿里云 EMAS & 魔笔:7月产品动态

移动研发平台EMAS

阿里云 消息推送 移动开发 低代码开发 app自动化测试

一文读懂快速开发平台

互联网工科生

低代码 开发平台 JNPF

技术分享 | StoneData 的身份认证与访问控制策略:构建安全可靠的数据分析环境

StoneDB

MySQL 数据库 HTAP StoneDB

华为阅读与博集新媒达成合作 推进数字化阅读高质量发展

最新动态

文心一言 VS 讯飞星火 VS chatgpt (72)-- 算法导论7.1 3题

福大大架构师每日一题

福大大架构师每日一题

企业选择大文件传输软件的真正原因

镭速

大文件传输软件

杭钢集团:用友iuap为数智底座的数智化转型之路

用友BIP

数智底座

拓展知识 启望未来 | 记内蒙古移动《AntDB ACA初级认证培训》活动

亚信AntDB数据库

数据库 AntDB AntDB数据库

HTML5 Canvas 和 SVG哪个简单好用

2D3D前端可视化开发

html5 SVG 数据可视化 canvas 前端设计

CommunityOverCode Asia 专题介绍之流处理

Apache Flink

大数据

为什么要选择文件传输软件?有哪些最佳高速文件传输软件?

镭速

文件传输软件

大文件传输软件| 生命科学中的关键因素

镭速

大文件传输快速

NFTScan | 07.31~08.06 NFT 市场热点汇总

NFT Research

NFT\

混合云环境实现K8S可观测的6大策略

高端章鱼哥

Kubernetes 分布式 k8s APM 混合云

中国电信与国家信息中心共同发布国信政务云

天翼云开发者社区

云计算 政务云

一文让你了解网络安全和云安全的区别与联系

行云管家

云计算 网络安全 云安全

Concealer for Mac(文件信息加密工具) v1.3.6中文版

mac

苹果mac Windows软件 Concealer 密码管理软件

用低代码开发平台构建高效敏捷工作流

力软低代码开发平台

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