【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

评论

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

介绍一款文本分析工具

黄大路

数据挖掘 数据分析 nlp

Git内部原理介绍

戈坞昂

git

李想解读《高效能人士的七个习惯》

我心依然

习惯 高效能人士的七个习惯 李想 汽车之家

听过很多道理,依然过不好这一生。

Neco.W

感悟 创业心态

浅谈使命、愿景、价值观。

石云升

价值观 使命 愿景

MySQL查询优化一般步骤

Albert

MySQL sql 查询优化

"第1天,读以太坊白皮书 | 5天掌握以太坊 dApp 开发"

陈东泽 EuryChen

区块链 以太坊 dapp Ethereum blockchain

使用docker-compose部署单机RabbitMQ

Kevin Liao

Docker Docker-compose RabbitMQ

IO多路复用整理

戈坞昂

Linux io

工厂模式(二)MyBatis中展示的简单的工厂模式

LSJ

mybatis 工厂模式

全栈工程师为什么越混越困难,看这篇就够了

金刚小书童

程序员 职业规划 技术管理 全栈工程师

RestTemplate 配置手册

zane

Spring Boot HTTP

唯技术论坏处都有啥?如何跳出唯技术论思维?

KAMI

方法论 思考 思维方式 开发 唯技术论

《零基础学 Java》 FAQ 之 14-访问控制符总结

臧萌

Java

《零基础学 Java》 FAQ 之 15-Java泛型做了两件事

臧萌

Java

《零基础学 Java》 FAQ 之 16-泛型引用的通配符再解

臧萌

Java

程序员如何阅读英文资料

AR7

学习

专业的力量

无量靠谱

淘宝 美团 专业 专业主义 大前研一

《零基础学 Java》 FAQ 之 13-编程里的两个特殊的值

臧萌

Java

【摘】Git-从零单排 01期

卡尔

git 效率工具 工具 开发工具

团队快速扩张时期的组织架构演进

Taylor

团队管理 团队协作 团队 团队组织

mac 安装特定版本php-redis

Albert

php

记:mybatis <foreach> 语法错误

Kevin Liao

mybatis foreach SQL语法 SQLSyntaxErrorException

Android实现人脸识别(人脸检测)初识

sar

android OpenCV renlianshibie

重磅!Apache Flink 1.11 功能前瞻抢先看!

Apache Flink

大数据 flink 流计算 实时计算

ARTS - 第一周打卡

陈文昕

机器学习-有监督学习入门

第519区

学习 产品经理

1分钟学习Java中数组快速复制

Albert

Java 数组

简单聊聊什么是苹果生态

李俊辰

JAVA AGENT 学习

zane

Java

OpenResty 部署配置和日志切割

wong

centos log openresty

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