写点什么

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:007665

评论

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

Java培训 动态代理的底层原理

@零度

JAVA开发 动态代理

TiDB v6.0.0 (DMR) :缓存表初试丨TiDB Book Rush

PingCAP

TiDB

3. Caller 服务调用 - dapr

MASA技术团队

C# .net 框架 Framework dapr

代理类型升级,APISIX 支持 Kafka 作为上游

API7.ai 技术团队

kafka 后端 代理 网关 APISIX 网关

NFT质押LP流动性挖矿系统开发详情

开发微hkkf5566

疫情之下,元宇宙游戏开发设计如何发展?

开源直播系统源码

游戏开发 元宇宙

太阳能无线LED显示屏的特点

Dylan

LED LED显示屏

Flink流处理API大合集:掌握所有flink流处理技术,看这一篇就够了

百思不得小赵

大数据 6月月更 flink api

易观分析《2022年中国银行业隐私计算平台供应商实力矩阵分析》研究报告正式启动

易观分析

银行技术

物联网低代码平台常用《组件介绍》

AIRIOT

低代码 物联网 低代码开发平台 低代码平台 低代码,项目开发

讲师征集令 | Apache DolphinScheduler Meetup分享嘉宾,期待你的议题和声音!

白鲸开源

Apache 大数据 开源 workflow dolpinsheduler

当量子计算遇上人工智能

启科量子开发者官方号

人工智能 算力 量子计算

一套十万级TPS的IM综合消息系统的架构实践与思考

JackJiang

网络编程 架构设计 即时通讯 im开发

小白创业做电商,选对商城系统很重要!

CRMEB

叮!Techo Day 腾讯技术开放日如约而至!

CODING DevOps

CODING DevOps Cloud Studio Techo 腾讯技术开放日

Wallys/4×4 MU-MIMO 6GHz QCN9074 Single Band Wireless Module

wallys-wifi6

字节跳动数据平台技术揭秘:基于ClickHouse的复杂查询实现与优化

字节跳动数据平台

Clickhouse

如临现场的视觉感染力,NBA决赛直播还能这样看?

阿里云CloudImagine

音视频 直播 音视频直播 直播解决方案

layui-vue简单体验

Python研究所

6月月更

LSF 集群全面监控!浅析 HPC 基于龙蜥操作系统的迁移替代解决方案

OpenAnolis小助手

开源 解决方案 龙蜥操作系统 常青藤开源科技 HPCinsights

通过大数据培训学习后到35岁后为什么会失业

@零度

百度APP 基于Pipeline as Code的持续集成实践

百度Geek说

Java’

中国内地仅四家突围 联想智慧颐和园荣获 “2022年IDC亚太区智慧城市大奖”

科技大数据

VPS是干嘛用的?有哪些知名牌子?与云服务器有什么区别?

行云管家

运维 等保备案 VPS

人人都可以参与开源!龙蜥社区最不容错过的开发者活动来了

OpenAnolis小助手

开源 龙蜥社区 礼品 开发者激励 贡献

《数字经济全景白皮书》消费金融数字化篇 重磅发布

易观分析

消费金融

等保备案主体是谁?在当地网安进行备案是吗?

行云管家

等保 等级保护 等保备案

wallys/DR7915-wifi6-MT7915-MT7975-2T2R-support-OpenWRT-802.11AX-supporting-MiniPCIe-Module

wallys-wifi6

百问百答第44期:应用性能探针监测原理-Python探针

博睿数据

APM AIOPS 智能运维 博睿数据 性能监测

大神详解开源 BUFF 增益攻略丨直播讲座

Apache IoTDB

开源 面试 求职 秋招 线上讲座

OpenHarmony—内核对象事件之源码详解

OpenHarmony开发者

Open Harmony

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