9 月 21 日,大家期待已久的 Java 9 终于正式发布了,本文与大家一起快速回顾一下 IntelliJ IDEA 中 Java 9 的支持,并了解 IntelliJ IDEA 2017.3 中针对 Java 9 的推出的新功能。

Jigsaw 和 JPMS

提及 Java 9,最大的功能莫过于 Jigsaw 项目下的核心 Java 平台模块化系统(JPMS,Java Platform Module System) 。 Jigsaw 本身是一项很有野心的项目,它的目标是改进 Java SE 平台,使其可以适应不同大小的计算设备;改进其安全性,可维护性,提高性能;简化各种类库和大型应用的开发和维护,包括 JDK 本身的模块化。

IntelliJ IDEA 支持具有许多功能的 Java 平台模块化系统。

首先开发者可以轻松地为 IntelliJ IDEA 模块创建一个 module-info.java 文件:

这将给出模块声明的基本结构,包括与 IntelliJ IDEA 模块名称相匹配的模块名称。 当开发者在 module-info.java 文件中编码时,代码会高亮显示。

倘若开发者从带有 module-info.java 文件的模块中运行代码,IntelliJ IDEA 将自动使用 -p 参数(模块路径)而不是 -classpath。

IntelliJ IDEA 也针对将代码迁移到 JPMS 时出现的常见问题提供了快速修复功能,比如添加“require”指令。

或自动检测重复的指令及其他可以修复的错误。

开发者还可以通过 IntelliJ IDEA 创建模块图,以可视化正在使用的模块。 此外,也能看到 JDK 模块、自己创建的模块等等,如下图所示。

当开发者开始使用模块化时,这些图表就能起到很好的作用,其可以帮助开发者了解正在使用哪些模块以及模块的架构,甚至可以直接从图中定位到具体的模块代码。

IntelliJ IDEA 也会帮助将代码迁移到 Java 9。例如,用户可以高亮显示使用的动态模块。

这意味着开发者可以看到一些并非是 Java 9 模块的内容。 这很重要,因为这些动态模块可能会随时间而改变。

了解有关 IntelliJ IDEA 中模块的基本支持的更多信息,以及模块图和其他快速修复

便利的工厂方法

Java 9 引入了许多小的 API 更改,使开发人员更轻松。 其中之一是简化具有固定内容集合的创建。在 IntelliJ IDEA 中可以查找到改功能。

如下图所示,高亮的代码即是使用 Java 9 的工厂方法简化之后的效果。

Thread.onSpinWait

Java 9 提供了 JVM 的提示。 具体来说,如果开发人员的代码在循环中等待,那么就可以使用 Thread.onSpinWait 来让运行时知道。 IntelliJ IDEA 查找代码,添加这个功能可能会使用到。

增强的弃用

在 Java 9 有一个看似较小的功能,但可以让开发人员更容易了解其代码的影响,这个就是增强的弃用。 现在,@Deprecated 标签支持两个有用的新属性:“since”和“forRemoval”。 在 IntelliJ IDEA 2017.3 中进行了新的检查,高亮显示使用已被标记为“forRemoval”的代码。

如果已经打开此检查并将其设置为“警告”(这是默认值),那么被标记为“forRemoval”的内容,在 IntelliJ IDEA 将以红色杠显示此方法,而不是以往的黑色。

JShell 工具

Java 9 首次提供 Java 的 REPL (Read-Eval-Print-Loop,读入-求值-打印-循环)功能,称为JShell 工具。它的目的在于以即时结果和反馈的形式,简化原型的实现并帮助我们探索语言在编码时的可选项。用户可以从命令行或 IntelliJ IDEA 中的终端运行 REPL。 此外,IntelliJ IDEA 2017.3 还具有一个基本控制台,可从 IDE 内部使用 JShell,类似于 Groovy Console。

开发者可以使用控制台来尝试代码片段,也可以选择运行此代码的模块路径。

该功能目前仅能在 2017.3 EAP 中可用。

无须额外的支持

Java 9 中有许多新功能,包括对 Streams API 的更改、可选的附加功能、接口上的私有方法等等。

如果项目 SDK 设置为 Java 9,那么这些新方法在编码期间都可以使用了。

另外,还可以使用 IntelliJ IDEA 常见功能来挖掘一些 Java 9 的功能。 比如,在生成文档时通过添加标志来生成 HTML 5 Javadoc。

开发者甚至可以使用 IntelliJ IDEA 创建 Multi-Release JAR 文件。 这也许是建立 Gradle、Maven 或 Ant 等工具的最佳选择,至于这些,未来可能在 IntelliJ IDEA 博客中更新。

最后,Oracle 宣布今后会按照每六个月一次的节奏进行发布!这意味着 Java 9 是最后一次“keystone”特性驱动的版本发布。Oracle还表示,Java 8 目前仍可继续使用,它的支持时间将延续到 2022 年。

Logo

20年前,《新程序员》创刊时,我们的心愿是全面关注程序员成长,中国将拥有新一代世界级的程序员。20年后的今天,我们有了新的使命:助力中国IT技术人成长,成就一亿技术人!

更多推荐