当前位置: 首页 > news >正文

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

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(); // infers ArrayList
var stream = list.stream(); // infers Stream
这种语句只能用于带有初始化器(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等,外界很期待这些内容最终也能添加到新版本中。

相关文章:

  • sed和gawk基础
  • [C]整形提升(转载)
  • 软考高级(四)
  • 大数据等最核心的关键技术:32个算法
  • 处理数据对象的实用函数
  • es6笔记干货
  • 小提琴图
  • gitlab-ci配置详解(一)
  • 解决firefox疯狂读硬盘的问题
  • 动态类型序列化
  • 【java】java学习之路-01-Linux基础(一)
  • NullAway:Android上的NullPointerExceptions的开源工具
  • ASP.NET MVC Model元数据(五)
  • Android 解决ListView 和 ScrollView 共存冲突的问题
  • [Web开发] Web 2.0 网站估价工具
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • 2019年如何成为全栈工程师?
  • Docker: 容器互访的三种方式
  • Electron入门介绍
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java-详解HashMap
  • Linux各目录及每个目录的详细介绍
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Rancher-k8s加速安装文档
  • use Google search engine
  • uva 10370 Above Average
  • Wamp集成环境 添加PHP的新版本
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 前端临床手札——文件上传
  • 如何设计一个微型分布式架构?
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • ###项目技术发展史
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #pragma pack(1)
  • #Ubuntu(修改root信息)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (6)设计一个TimeMap
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (七)c52学习之旅-中断
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET delegate 委托 、 Event 事件
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET连接MongoDB数据库实例教程
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • [ Linux ] Linux信号概述 信号的产生