【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

评论

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

通过认证|龙智正式成为Atlassian云专业伙伴

龙智—DevSecOps解决方案

云原生

世界杯太精彩了,带大家用Python做个足球游戏,边玩游戏边看比赛

Lansonli

Python游戏 Python足球游戏 世界杯足球游戏

代码安全与质量 | 在这个充满变数的时代,花小钱办大事

龙智—DevSecOps解决方案

代码质量 代码安全检测 代码安全 安全防护

觅健牵手博鳌医院战略合作:即时优享全球肿瘤创新治疗方案

联营汇聚

React 之 Refs 的使用和 forwardRef 的源码解读

冴羽

JavaScript react.js 前端 前端框架 React

隐藏复杂、抽象概念,「技术无感化」 ——The Future of Database2022 | 黄东旭新番

B Impact

2022年第三季度汽车品牌智能网联竞争力指数(ICVCI)分析

易观分析

汽车 易观分析 智能网联

【MindStudio训练营第一季】MindStudio 高精度对比随笔

Angel Wings

MindStudio

可观测性神器之Micrometer

宋小生

监控 可观测性 micrometer

双机互备是什么意思?双机互备就是双机热备吗?

行云管家

双机热备 双机互备

信息安全等级保护的5个级别分别是什么?最高级别是哪个?

行云管家

等保 等级保护

AWS CEO Adam Selipsky 演讲 Keynote @ re:Levent2022

B Impact

亚马逊CTO Werner Vogels 演讲Keynote:世界一直无序地运转向前 @AWS re:Invent 2022

B Impact

【MindStudio训练营第一季】MindStudio Profiling随笔

Angel Wings

华为 AI 调优 MindStudio Ascend

【MindStudio训练营第一季】MindStudio 专家系统随笔

Angel Wings

mindspore MindStudio

如何设计业务异地多活架构 - week7

in9

实时数据赋能制造业产能升级:详解半导体和汽车制造行业最佳实践(活动报名)

tapdata

制造业 数据集成 汽车制造 实时数据 半导体行业

从今天起真正释放创造力 | Werner Vogels 在 re:Invent 2022带来多项开发者福音

亚马逊云科技 (Amazon Web Services)

亚马逊云科技

版本控制 | 一文了解什么是组件化开发,以及如何从单体架构转向组件化开发

龙智—DevSecOps解决方案

组件化 组件化开发

软件测试 | 测试核心:如何减少线上故障?

测试人

软件测试 软件质量 自动化测试 测试开发

HummerRisk 入门3:开发手册

HummerCloud

云安全 云原生安全 12月月更

听软件测试自动化“领导者”讲解如何降本、增效与提质

龙智—DevSecOps解决方案

测试 自动化测试 测试自动化

【MindStudio训练营第一季】MindStudio 可视化AI应用开发体验随笔

Angel Wings

MindStudio

面试官:你先回去等通知吧!这个Java岗位我还有机会吗?

钟奕礼

Java java面试 java编程 程序员、

一站式动态多环境建设案例

阿里巴巴中间件

阿里云 微服务 云原生 中间件 客户案例

神秘新品即将来袭!大上科技开启护眼新未来倒计时

硬科技星球

36kr企服点评启发:“信任的基础是真实,只要做到真实,一定能够建立起双向信任”

B Impact

金融信创正当时!看这家银行如何实现数据仓库与营销平台国产替换?

索信达控股

数据库 银行 数据库迁移 智能营销

实践案例丨CenterNet-Hourglass论文复现

华为云开发者联盟

人工智能 华为云 12 月 PK 榜

手机银行APP评测系列:天津银行持续优化手机银行用户体验,但仍需加强细节提升

易观分析

手机银行 用户

为什么我们不支持手工上传镜像

Jianmu

Docker 容器 镜像

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