题图:by jordhammond from instagram
本文选自聊聊架构公众号,略有修改
以前我们 Java 程序员经常会对其他语言中的 var 关键字耿耿于怀,如今,Java 10 也要启用 var 进行变量声明了……
早在 2016 年,有一个 JDK 增强提议(JEP)在 Java 社区引起了轰动:JEP 286。2 年后的今天,局部变量类型推断可以说是 Java 10 中最值得关注的特性。这是 Java 语言开发者为简化 Java 应用程序的开发而采取的又一举措。接下来我将为大家介绍这一举措的意义和对 Java 程序员的影响。
分解局部变量类型推断
这个新特性将为 Java 增加一些语法糖——简化它并改善开发者体验。新的语法让 Java 代码更简洁,同时保持静态类型安全。
换句话说,你将能够声明变量而不必指定关联的类型。比如之前如下的变量声明:
List list = new ArrayList(); Stream stream = getStream();
简化后的语法如下:
var list = new ArrayList(); var stream = getStream();
如上所示,局部变量类型推断将引入“var”关键字,而不要求明确指定变量的类型。
大家都知道,Java 的语法有点冗长,这对于理解开发人员编写函数的意图可能会有好处。但是,对于那些认为用 Java 开发软件太乏味的人来说,这个特性意味着一个重大的改变。
虽然类型推断在 Java 中不是一个新概念,但对于局部变量来说却是全新的。
这一切都是在 Java 5 中引入泛型时开始的。然后,Java 7 作为 Coin 项目的一部分进一步开发出了菱形运算符(),该运算符允许使用没有绑定类型的 ArrayList初始化列表,而 Java 8 中出现了 Lambda 表达式。使用菱形操作符可以编写以下代码:
List list = new LinkedList();
现在,Oracle 团队要更进一步。
社区反应
在 JEP 286 成为事实上的 JEP 之前,Oracle 进行了一项调查,以更好地了解 Java 社区对该提议的反应。调查大部分集中在对提议的总体感受上,以及社区对实现这个特性有哪些想法。在 2453 名开发人员的回复中,大部分是赞成的:
调查问题:你对局部变量类型推断提议的总体感受是怎样的?
调查的第二部分侧重于可能的语法选择,基于其他语言(如 C#、Scala、Swift 和 C ++)中的类似用法提出了 5 个选项,或使用 let。
大多数用户投票选择 var 和 val:
调查问题:可能的语法选项
最后,团队决定选用第二受欢迎的选项,也就是使用 var。
Java 社区的大多数成员似乎都赞同这种新的选择,其中许多人要求 Oracle“与时俱进”。少数反对该特性的开发人员声称,对于那些新学 Java 的人来说可能会很困难,也有人指出现有的语法是“冗长和易读性的最佳组合”。
当然list初始化,在 JEP 286 主页上,可以看到添加新功能的理由:
Java 几乎是唯一不包含局部变量类型推断的静态类型语言;因此,这个功能不应该再有争议。
对编码有何影响?
在兴奋过后,我们通常想问自己的第一个问题是:这对我的代码有何影响?在特性总结中,处理“Java 中样板编码的度”是主要动机,因此我们可以期待将来能够省略掉类型声明。
更具体的,它局限于:
Oracle 的 Java 团队申明list初始化,以下不支持局部变量类型推断:
由于 Java 承诺支持以前版本,我们可以认为它不会破坏向后兼容性。
其他改进:GC 改进和其他内务特性
JDK 10 中有 2 个 JEP 专注于改进当前的 GC。第一个 JEP,垃圾回收接口(JEP 304),将引入一个干净的垃圾回收接口,以提升不同垃圾回收器的源代码隔离。
在当前的 Java 版本中,GC 源文件零散地分散在 HotSpot 源代码中。这在实现新的垃圾回收器时会成为问题,因为开发人员必须知道在哪里查找这些源文件。此 JEP 的主要目标之一是,使 HotSpot 内部 GC 代码更加模块化,GC 接口更干净并使实现新回收器更加容易。
Java 10 的第二个 JEP 是针对 G1 的 Parallel Full GC(JEP 307),其重点在于通过 Parallel Full GC 来改善 G1 最坏情况的等待时间。G1 是 Java 9 中的默认 GC,此 JEP 的目标是使 G1 也支持并行收集。
Java 10 计划的特性还有:
上手体验
就像所有其他 JDK 版本一样,Oracle 已经创建了一个 Early Access Release,Java 用户可以下载下来试用新功能。事实上,这个 JEP 自 2016 年初开始就已经可用于体验目的,那你还等什么?
即使你还没有开始考虑迁移到 JDK 9,感受新功能并有机会向平台设计人员提供反馈,这是学习新版本并在社区产生一定影响的好办法。
卖桃者说
今天我们发布了极客时间微信小程序版本,1.0,三端齐全,只是个开始。曾经跟我抱怨过不喜欢用 App 的朋友,你们可以用小程序听极客时间了。
很多人说小程序是不是把 App 里的功能搬进来就可以了呢,答案当然是否定的,每个平台都有自己的特点,就像你不能把 Web 功能直接放到移动平台上来一样。未来极客时间小程序会更大程度的利用微信小程序的力量,完成独立的端用户体验,释放其自有力量,敬请期待。
限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688