Java 14 新功能抢先看

<a href='/tag/java.html'>Java</a> 14 新功能抢先看

第14版包含的JEP(Java Enhancement Proposals,Java增强提案)比12版和13版加起来还要多。在这篇文章中,我将主要讨论以下几点:

改进的switch表达式,第一次出现在Java 12和13中,在Java 14中获得了完全的支持

instanceof支持模式匹配(语言特性)

NullPointerException(JVM特性)

希望你在阅读完本文后,积极地代码中实验这些功能,为Java团队提供反馈,并为Java的发展做出贡献。

Switch表达式

Java 14中的switch表达式将会永久存在。

在之前的发布中,switch表达式只是一个“预览”阶段的特性。我想提醒一下,“预览”阶段的特性的目的是为了收集反馈,这些特性可能会随时改变,根据反馈结果,这些特性甚至可能会被移除,但通常所有预览特性最后都会在Java中固定下来。

新的switch表达式的优点是,不再有缺省跳过行为(fall-through),更全面,而且表达式和组合形式更容易编写,因此出现bug的可能性就更低。例如,switch表达式现在可以使用箭头语法,如下所示:

var log = switch (event) {

case PLAY -> "User has triggered the play button";

case STOP, PAUSE -> "User needs a break";

default -> {

String message = event.toString();

LocalDateTime now = LocalDateTime.now();

yield "Unknown event " + message +

" logged on " + now;

}

};

文本块

Java 13引入的一个预览功能是文本块。有了文本块,多行的字符串字面量就很容易编写了。这个功能在Java 14中进行第二次预览,而且发生了一些变化。例如,多行文本的格式化可能需要编写许多字符串连接操作和转义序列。下面的代码演示了一个HTML的例子:

String html = "<HTML>" +

"\n\t" + "<BODY>" +

"\n\t\t" + "<H1>\"Java 14 is here!\"</H1>" +

"\n\t" + "</BODY>" +

"\n" + "</HTML>";

有了文本块,就可以简化这一过程,只需使用三引号作为文本块的起始和结束标记,就能编写出更优雅的代码:

String html = """

<HTML>

<BODY>

<H1>"Java 14 is here!"</H1>

</BODY>

</HTML>""";


与普通的字符串字面量相比,文本块的表达性更好。更多的内容可以参考这篇文章(https://blogs.oracle.com/javamagazine/text-blocks-come-to-java)。

Java 14引入了两个新的转义序列。

第一,可以使用新的 \s 转义序列来表示一个空格。

第二,可以使用反斜杠 \ 来避免在行尾插入换行字符。这样可以很容易地在文本块中将一个很长的行分解成多行来增加可读性。

例如,现在编写多行字符串的方式如下:

String literal =

"Lorem ipsum dolor sit amet, consectetur adipiscing " +

"elit, sed do eiusmod tempor incididunt ut labore " +

"et dolore magna aliqua.";

在文本块中使用 \ 转义序列,就可以写成这样:

String text = """

Lorem ipsum dolor sit amet, consectetur adipiscing \

elit, sed do eiusmod tempor incididunt ut labore \

et dolore magna aliqua.\

""";

instanceof的模式匹配

Java 14引入了一个预览特性,有了它就不再需要编写先通过instanceof判断再强制转换的代码了。例如,下面的代码:

if (obj instanceof ...

点击查看剩余70%

{{collectdata}}

网友评论0