Java 11与 IntelliJ IDEA

来自: 21CTO(微信号:we21cto),作者:Trisha Gee,编译:洛逸
来源:
https://blog.jetbrains.com/idea/2018/06/java-11-in-intellij-idea-2018-2/
http://openjdk.java.net/projects/jdk/11/

导读:IntelliJ IDEA 已经支持 Oracle 发布最新版 Java 11。本篇文章就是介绍关于 InterlljJ IDEA 对 Java 11的新功能的特性支持等信息。



Java 11 在十一前已经发布,可能是刚过节的原因,感觉就像昨天一样,一年前我们也对Java 9说了同样的话。


这个六个月就发布一版的节奏对开发者社区来说是一个很大的变化,对于Java开发人员来说,定期就能获得一些有趣的新功能,这也很令人兴奋。


关于 Java 11


与Java 10 一样,Java 11也有一个简短的新功能列表,因为它更容易看到对开发者有用的东西。我们从IntelliJ IDEA的角度来看,实际上只有一个功能受益于IDE 的额外支持,那就是JEP 323:Lambda参数的本地变量语法。 


在Java 8中引入lambda表达式时,您可以编写如下内容:


BiConsumer<Processor, String> consumer1 = (Processor x, String y) -> x.process(y);


包含x和y参数的类型信息。 但是,您不需要包含此类信息,因为它已为人所知。 在这种情况下,左边的BiConsumer用泛型声明这两种类型。 IntelliJ IDEA允许您删除这些类型,如果您愿意:



Java 10为局部变量类型引入了var,我们将在本文稍后讨论,Java 11进一步考虑了var on lambda表达式参数。 这个的主要用例是当参数需要注释时。 注释出现在类型旁边,因此在Java 11之前,这意味着带有注释的代码可能如下所示:


BiConsumer<Processor, String> consumer = (@NotNull Processor x, @Nullable String y) -> x.process(y);


在Java 11中,我们可以使用var而不是参数类型来缩短它,IntelliJ IDEA可以为您执行此转换。 请注意,当您在类型上按Alt + Enter时,建议执行此操作,但未在代码中将其标记为警告。


如下图:



Java 11:开发者要有意识,一些API可能不存在了


除了新的语言功能之外,了解Java 11上删除了一些功能也很重要。

此步骤不仅影响到以前没有用过或已弃用的特性和功能,还可能通过将一些大型模块移到单独的依赖项,例如JavaFX;也或者移除已使用的外部依赖项来简化语言的核心,例如Java EE。


目前Java EE和CORBA模块都已删除,虽然CORBA可能没有被频繁使用,但许多应用都使用了Java EE。通常,这是在应用程序服务器或Java EE的某些特定实现的上下文中,某些应用程序和库会用到Java EE的一小部分用于特殊目的。比如,JAXB现在不在核心语言中,你就需要添加一个特定的依赖项。


Java 10


这本版本是在本年度六个月前发布,我想我们中的许多人可能还没有开始使用它。


这里提醒一下,Java 10的主要新功能是引入var,正如我们上图所见,它允许开发者使用var而不用再指定类型。这并没有在Java中引入动态类型,相反,它持续减少了 Java 中模板的趋势,类似于钻石运算符(https://www.javaworld.com/article/2074080/core-java/core-java-jdk-7-the-diamond-operator.html)的引入,这意味着我们不再需要在等号的两侧声明泛类型。


IntelliJ IDEA以多种方式支持var。 首先,检查为您提供了使用var 或 var替换类型的选项。



默认情况下,它不会向你发出有关可以使用var(或应具有显式类型)代码的警告,但是在通常情况下,建议可以根据自己团队的样式配置检查。



IntelliJ IDEA还可以帮助你去导航代码来使用var。按住Ctrl/⌘ 键,将鼠标悬停在var上将显示变量之类型。



与其它任何类型一样,我们可以单击此处导航到声明,或者我们可以使用Ctrl+B/⌘ + B 通过var导航到声明。 我们还可以在var上使用快速文档(Ctrl + Q / F1)或快速定义(Ctrl + Shift + I /⌥ + Space)来查看类型。



Java 10还附带了一些对Optional和Collectors的一些很好补充,比如你正在用Streams API,那么很值得看看这些新方法。


Java 9


去年9月发布的Java 9版本是一个大动作,而如今人们会惊讶地发现10和11都已取代了9。有些JDK提供商(比如Oracle)不再为Java 9(甚至Java 10)提供长期支持。想要从Java 8直接跳到Java 11的团队,在没有长期支持的情况下跳过版本,仍然需要了解Java 9中发生的变化,因为它们已经是Java 11的一部分了。


在Java 9中,模块化是最着名的功能,还有很多其他功能,包括新的便利的工厂收集方法。就我个人而言,是最喜欢的Java 9功能,很方便的是,IntelliJ IDEA代码检查可以提供代码迁移以便使用新方法。



小结:关于版本迁移的说明


虽然本篇文章目的是展示IntelliJ IDEA中的新功能,让使用Java 9,10和11更容易,而非专门帮助开发人员将代码迁移到这些版本,


我们提出这方面的一些建议:如果你希望在不久的将来用Java 11,首先应确保所有依赖项都是最新的。许多使用 Java9的JVM语言,库和框架必须进行重大更改,然而,要跟上Java 10和Java 11的脚步,还有很多改进工作要做。开发者应该在更新库的版本的同时,让自己的应用程序的影响最小,这是使用最新版本的Java的重要一步。


使用IntelliJ IDEA从Oracle Java Magazine迁移Java 8到Java 9,可无痛迁移到Java Jigsaw模块。



Java 11 虽然才刚刚发布几天,但IntelliJ IDEA 已经完全支持它,并且也更容易使用Java 11,10以及9中的新功能。


今天我们就试试吧!您可以下载开源OpenJDK版本(Oracle提供的版本:http://jdk.java.net/11),该版本现已可供生产使用。


注意,我在这里建议您使用 OpenJDK 构建,因为Oracle已更改了它的使用许可证,它有商业和开源JDK两个版本,了解这点也非常重要!

推荐↓↓↓
Java编程
上一篇:阿里监控诊断工具 Arthas 源码原理分析 下一篇:历史性难题——如何为Kafka挑选合适的分区数?