写点什么

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

  • 2017-09-27
  • 本文字数:1897 字

    阅读完需:约 6 分钟

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 module 匹配的模块名。当然,在使用该文件的时候,可以借助代码高亮和补全功能:

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

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

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

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

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

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

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

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

便利的工厂方法

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

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

Thread.onSpinWait

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

增强的弃用标记

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

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

JShell

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

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

这项特性会在 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 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-09-27 19:007595

评论

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

软件测试/测试开发/人工智能丨视觉与图像识别自动化测试

测试人

人工智能 软件测试

程序员惶恐?GPTs大火,AI编程不会成为主流?

代码生成器研究

百度爬虫的工作原理解析

快乐非自愿限量之名

百度 爬虫 爬虫分享

Rhino 8 for Mac(犀牛3D建模软件)中文版

iMac小白

微信传输助手是什么?类似功能推荐!

职场工具箱

文件传输 素材中转站

在Vue3中使用Element-Plus分页(Pagination )组件

快乐非自愿限量之名

Vue3 教程分享

SpringBoot 分布式锁 @klock详解

javaNice

Java springboot

一文全面了解低代码

树上有只程序猿

软件开发 低代码 JNPF

Scrum敏捷开发培训敏捷开发团队必修课

顿顿顿

scrum敏捷工具 scrum培训 敏捷开发培训 敏捷研发管理工具 scrum研发工具

文心一言 VS 讯飞星火 VS chatgpt (139)-- 算法导论11.4 3题

福大大架构师每日一题

福大大架构师每日一题

学python就能找到高薪工作吗?

代码生成器研究

开发体育直播系统,赛事数据如何影响着平台价值

软件开发-梦幻运营部

item_list_updown 接口获取淘宝商品的上下架时间?

技术冰糖葫芦

API 文档

spring.factories文件作用详解,@SpringBootApplication启动过程与其关联

javaNice

Java springboot

Netty源码学习4——服务端是处理新连接的&netty的reactor模式

快乐非自愿限量之名

Netty 源码学习

【网络通信】浅析UDP与TCP协议的奥秘

EquatorCoco

TCP 网络协议 UDP协议

关于代码混淆,看这篇就够了

雪奈椰子

C++PACS医学影像信息化数字平台源码

源码星辰

医学影像 PACS 三维重建

镭速,克服UDP传输缺点的百倍提速传输软件工具

镭速

文件传输工具 大文件传输工具 UDP传输

爱莫科技 ×英特尔®丨「虚拟店长」轻松提升消费者店消费体验

科技热闻

你怎么看低代码平台技术?

代码生成器研究

亚马逊AWSVS阿里云 | 轻量应用服务器性能评测对比

雪奈椰子

Amazon EC2 新手初探:为实例安装图形界面

王强

Amazon EC2 亚马逊云服务器

走进低代码:不懂编程也能5分钟开发一个应用

互联网工科生

低代码 JNPF

存在争议的低代码,真的能火吗?

代码生成器研究

inBuilder低代码平台新特性推荐-第八期

inBuilder低代码平台

LED植物生长灯怎么做更有效?聚光和散热不能少!

电子信息发烧客

AI机器学习:突破传统,引领智能科技未来

不在线第一只蜗牛

人工智能 机器学习 AI

当AI加上低代码,未来将如何颠覆我们的世界

代码生成器研究

上海站 | RocketMQ Meetup 重磅来袭

Apache RocketMQ

开源 消息中间件 微服务、 消息列队

IntelliJ IDEA宣布对Java 9的支持情况_Java_张卫滨_InfoQ精选文章