Java 10发布

2018 年 3 月 25 日

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

Oracle 发布了新版本的 Java,即 Java 10 。这个版本距离 Java 9 的发布刚刚过去了六个月,和上个版本一样,它也是特性发布版本,其生命周期只有六个月。

随着Java 10 的发布,Java 9 随即被废止,以后不会再有Java 9 的免费支持版本发布。从3 月20 日开始,Oracle 免费支持的Java 版本是Java 8 和Java 10。下一个长期支持的版本将会是Java 11,预计会在2018 年九月份发布。

最终的发布版本与 RC1 候选版本几乎没有什么差别,从 InfoQ 2017 年 11 月报道发布内容之后,Java 10 并没有添加什么重要的特性。

关于该版本语言级别的变更,可以通过版本的完整文档和发布说明获取。

对于开发人员来说,一个重要的变更就是新增了 var。这是对 Java 类型推断功能的增强,该特性已被证明比它刚刚出现的时候更为重要。在最简单的场景中,var允许我们按照如下的方式编写代码:

var foo = new ArrayList<String>();它将推断从值的类型转移到了变量中。

在 Java 10 中,该特性的实现是通过将var作为保留类型名而不是作为关键字来实现的。这意味着,使用 var 作为变量名、方法或包名并不会受到影响。

除了简单的场景,它实际上还允许我们使用以前所不允许的编程结构。例如,javac一直允许使用功能非常有限的类型推断形式:

复制代码
public class Test {
public static void main(String[] args) {
(new Object() {
public void bar() {
System.out.println("bar!");
}
}).bar();
}
}

Java 7 出现之前,它的功能边界已经被 Java 社区所知晓。

这种形式的类型推断所面临的问题在于它没有办法实际应用,“具有 bar 方法的对象”存在于编译器中,但是该类型无法通过变量类型的方式来表述,它并不是 _ 可表示的类型 _。

随着 Java 10 的发布,变量的类型不再需要明确指定,var能够避免明确表示类型,从而允许我们保留静态的类型信息。这意味着我们可以修改样例代码,编写成如下的样子:

复制代码
var o = new Object() {
public void bar() {
System.out.println("bar!");
}
};
o.bar();

var作为“魔力类型”来使用,允许程序员以某种方式保留每次类型推断的类型信息,这不禁让人联想到 Java 泛型的约束。

关于var如何实现非表示性类型的更高级用法,可以参考该文章。尽管该特性无法满足每个批判者对Java 类型系统的质疑,但是它的确代表了一种坚定(可能也是谨慎的)的进步。

查看英文原文: Java 10 Released

2018 年 3 月 25 日 19:002301

评论

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

《码出高效:Java开发手册》“码” 出高效的同时编写出高质量的代“码”。

Java成神之路

Java 程序员 架构 面试 编程语言

架构师训练营第五周学习总结

尹斌

数据湖探索DLI新功能:基于openLooKeng的交互式分析

华为云开发者社区

数据 处理

批处理 有状态等应用类型在K8S上应该如何配置?

东风微鸣

Kubernetes 最佳实践

容器化应用系统上生产的最佳实践

东风微鸣

Kubernetes 最佳实践 生产

Vidyo产品给用户方带来了什么直接的便利

dwqcmo

音视频会议 集成架构 解决方案 智能硬件

现成区块链交易所开发app,币币撮合交易平台搭建

WX13823153201

现成区块链交易所开发

架构训练营第一周学习小结

李日盛

socket编程

菜鸟小sailor 🐕

websocket

小熊派开发实践丨漫谈LiteOS之传感器移植

华为云开发者社区

开发 IoT stm32

微服务的理想与现实

京东智联云开发者

云原生

MySQL官方特供649页顶级笔记,凝聚社区力量深入技术内幕

周老师

Java 编程 程序员 架构 面试

面试官的灵魂一击:你懂 MySQL 事务日志吗?

Java架构师迁哥

在K8S Volume中使用 subPath

东风微鸣

Kubernetes 最佳实践

架构师训练营第一周课后作业

李日盛

标准的开发框架,对企业开发有多重要?

Learun

敏捷开发 快速开发

趣味科普丨一文读懂云服务器的那些事儿

华为云开发者社区

镜像 服务器 服务

GitLab用户切换引发的某程序员“暴动”,怒而开源项目源码

小Q

Java git 学习 开发 代码仓库

数据安全无小事:揭秘华为云GaussDB(openGauss)全密态数据库

华为云开发者社区

安全 数据 加密

谁说AI看不懂视频?

华为云开发者社区

视频 剪辑

商用密码与区块链共推数字经济发展

CECBC区块链专委会

网络安全 数字经济

为什么Java容器推荐使用ExitOnOutOfMemoryError而非HeapDumpOnOutOfMemoryError?

东风微鸣

Kubernetes 最佳实践 jvm调优

1分钟带你get React setState 面试要点

Leo

面试 前端 React 前端进阶训练营 setState

spring-boot-route(二十二)实现邮件发送功能

Java旅途

Java Spring Boot 发送邮件

Java中String占用空间的评估标准

陈德伟

Java jdk 源码剖析

DDIA 读书笔记(2)数据模型的存储与检索

莫黎

读书笔记

学习总结

饺子

容器开发运维人员的Linux操作机配置优化建议

东风微鸣

Kubernetes 最佳实践 k8s入门

区块链赋能供应链金融|应用优势与四类常见模式

CECBC区块链专委会

区块链

自动化测试框架类型,你知道几种?此处介绍5种比较常见的

软测小生

软件测试 自动化测试框架 软件自动化测试

全面到哭!BAT内部Java求职面试宝典,必须人手一份!

Java架构之路

Java 程序员 架构 面试 编程语言

Java 10发布-InfoQ