IntelliJ IDEA宣布对Java 9的支持情况

Java 9于本月21日正式发布,广受开发者欢迎的IDE产品IntelliJ IDEA随即在官方博客介绍了对Java 9的支持情况以及即将发布的IntelliJ IDEA 2017.3所包含的新特性。现在,我们就看一下IntelliJ IDEA提供了哪些特性来帮助开发人员更高效地使用Java 9的新功能。

\\

Jigsaw与JPMS

\\

在Java 9中,最引人关注的新特性就是Java平台模块化系统(Java Platform Module System,JPMS)了,它是在Jigsaw项目下提供的。Jigsaw本身的任务范围更广泛一些,其中还包括对JDK本身的模块化,而对于开发人员来说,更关心的则是JPMS。

\\

IntelliJ IDEA通过多项特性来支持Java平台模块化系统。

\\

借助IDEA,我们可以很容易地为IntelliJ IDEA module创建module-info.java文件,如下图所示:

\\

IntelliJ IDEA宣布对Java 9的支持情况

\\

这样的话,就能得到模块声明的基本结构,包括与IntelliJ IDEA module匹配的模块名。当然,在使用该文件的时候,可以借助代码高亮和补全功能:

\\

IntelliJ IDEA宣布对Java 9的支持情况

\\

如果在一个带有module-info.java文件的模块中运行代码的话,IntelliJ IDEA会自动使用-p参数(模块路径)来替代-classpath:

\\

IntelliJ IDEA宣布对Java 9的支持情况

\\

在将代码迁移至JPMS时,对于常见的问题,IntelliJ IDEA提供了快速修正的功能,比如添加“requires”指令:

\\

IntelliJ IDEA宣布对Java 9的支持情况

\\

另外,还能够探测到重复的指令和其他可修复的错误:

\\

IntelliJ IDEA宣布对Java 9的支持情况

\\

IntelliJ IDEA还支持创建模块图,从而能够以可视化的方式展现我们所使用的模块。JDK模块、自己编写的模块以及自动化(automatic)模块会以不同的颜色显示,为了强调,传递性所需的模块会使用更粗的线来表示。

\\

IntelliJ IDEA宣布对Java 9的支持情况

\\

当我们刚开始使用模块化功能时,这些图会特别有用,因为它能够让我们清楚地看到都使用了哪些模块,它们来自哪里。

\\

IntelliJ IDEA还提供了探查(Inspection)功能,有助于将代码迁移至Java 9。例如,我们可以高亮显示自动化的模块:

\\

IntelliJ IDEA宣布对Java 9的支持情况

\\

这样的话,能够看出我们依赖的并不是真正的Java 9模块。这一点也是很重要的,因为这些自动化模块随着时间推移可能会发生变化:

\\

IntelliJ IDEA宣布对Java 9的支持情况

\\

关于IntelliJ IDEA对模块化的基本支持以及模块图和快速修复的功能,可以参考jetbrains博客上的相关文章。

\\

便利的工厂方法

\\

Java 9引入了一些小的API变更,让开发人员的工作变得更轻松。其中有一个API就是简化具有固定内容的Collections的创建。IntelliJ IDEA有一项inspection能够提示我们可以在何处使用这项新特性:

\\

IntelliJ IDEA宣布对Java 9的支持情况

\\

这样的话,相应的代码会高亮显示,提示我们可以使用Java 9的工厂方法来进行简化。

\\

IntelliJ IDEA宣布对Java 9的支持情况

\\

Thread.onSpinWait

\\

Java 9允许我们为JVM提供一些提示信息,便于实现性能的提升。具体来讲,如果你的代码需要在一个循环中等待某个条件发生的话,那么可以使用Thread.onSpinWait让运行时环境了解到这一点。IntelliJ IDEA能够定位到这种提示在何处会比较有用,并提示我们添加进来:

\\

IntelliJ IDEA宣布对Java 9的支持情况

\\

增强的弃用标记

\\

Java 9提供了另外一个看起来很小的特性,那就是增强的弃用标记,能够让开发人员更好地理解代码的影响。以前,我们只能将代码标记为deprecated并在Javadoc中添加一些原因说明的文档,现在@Deprecated新增了两个有用的属性:since和orRemoval。在IntelliJ IDEA 2017.3中将会有一个新的inspection项,如果我们使用了标记为“forRemoval”的代码,将会高亮提示。

\\

IntelliJ IDEA宣布对Java 9的支持情况

\\

我们开启这项探测并设置为“Warning”(默认配置)级别的话,如果使用了标记为“forRemoval”的代码,IntelliJ IDEA将会使用红色的删除线来标记,而不是之前常见的黑色:

\\

IntelliJ IDEA宣布对Java 9的支持情况

\\

JShell

\\

Java 9首次为Java语言提供了REPL工具,名为JShell。我们可以在命令行或者在IntelliJ IDEA的终端中运行该REPL。另外,IntelliJ IDEA还提供了一个基本的控制台,能够让我们在IDE中使用JShell,类似于Groovy Console

\\

IntelliJ IDEA宣布对Java 9的支持情况

\\

借助这个控制台,我们可以尝试代码片段,还可以选择运行代码的模块路径。

\\

IntelliJ IDEA宣布对Java 9的支持情况

\\

这项特性会在2017.3 EAP中提供支持。

\\

其他默认支持的特性

\\

Java 9提供了许多的特性,包括Streams API的变更、引入了Optional以及支持接口中的私有方法。如果我们将项目的代码级别调整为Java 9,这些特性将会自动支持,并且能够进行自动的代码补全。

\\

另外,还可以在生成文档的时候添加一个标记,使IntelliJ IDEA生成HTML 5格式的Javadoc

\\

我们还可以使用IntelliJ IDEA生成多个发布版的JAR文件,通常来讲这些工作可以留给Maven、Gradle或Ant这样的工具来完成,但是IntelliJ IDEA同样可以做到这一点。

\\

IntelliJ IDEA已经对Java 9的大多数功能提供了便利的支持,想切换至Java 9体验一下新特性的读者可以采用该IDE简化编码的流程。

\\

感谢郭蕾对本文的审校。

\\

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。