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

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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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等,外界很期待这些内容最终也能添加到新版本中。

转载于:https://my.oschina.net/u/3279502/blog/1560565

相关文章:

  • npm cli 调试方法
  • socket接受大的数据
  • redis开启远程访问
  • AE与AO的区别
  • Java 并发集合的实现原理
  • 如何利用C++搭建个人专属的TensorFlow
  • 基于HAProxy的高性能缓存服务器nuster
  • [20171106]配置客户端连接注意.txt
  • 分享Silverlight/WPF/Windows Phone一周学习导读(07月25日-07月31日)
  • Python类的一般形式和继承
  • ArcGIS 10.5 新功能
  • 局域网内手机播放视频
  • Ubuntu Server 10.10 操作手记
  • JavaScript 基本功--面试宝典
  • Oracle Number用法
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • CSS实用技巧
  • Electron入门介绍
  • HTTP中GET与POST的区别 99%的错误认识
  • Linux下的乱码问题
  • React组件设计模式(一)
  • text-decoration与color属性
  • 和 || 运算
  • 理清楚Vue的结构
  • 力扣(LeetCode)56
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 设计模式走一遍---观察者模式
  • 学习笔记TF060:图像语音结合,看图说话
  • 异常机制详解
  • 优秀架构师必须掌握的架构思维
  • 责任链模式的两种实现
  • $(function(){})与(function($){....})(jQuery)的区别
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (生成器)yield与(迭代器)generator
  • (十一)图像的罗伯特梯度锐化
  • (一) springboot详细介绍
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .gitignore文件设置了忽略但不生效
  • .net Application的目录
  • .NET Framework .NET Core与 .NET 的区别
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • .project文件
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @selector(..)警告提示
  • [ C++ ] STL---string类的使用指南
  • [ solr入门 ] - 利用solrJ进行检索
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [APUE]进程关系(下)
  • [BZOJ] 2427: [HAOI2010]软件安装
  • [c]统计数字