其他
Java 14 中令人期待的五大新特性!
随着新的 Java 发布生命周期的到来,新版本预计将于 2020 年 3 月发布,本文将对其中的 5 个主要特性作些概述。
作者 | Sylvain Saurel
译者 | 苏本如,责编 | 郭芮
出品 | CSDN(ID:CSDNnews)
以下为译文:
if (obj instanceof Integer) {
int intValue = (Integer) obj;
// ... use intValue ...
}
在这段代码中,我们通过instanceof运算符来检查obj变量是否是Integer的实例。如果条件为真的话,我们不能将obj直接作为一个整数变量使用,因为必须首先对它进行转换。
if (x instanceof Integer i) {
// ... use i as an Integer directly ...
}
在下面更复杂的例子中,我们可以更加理解Java 14中可以做到什么:
String formatted = "unknown";if (obj instanceof Integer i) {
formatted = String.format("int %d", i);
}
else if (obj instanceof Byte b) {
formatted = String.format("byte %d", b);
}
else if (obj instanceof Long l) {
formatted = String.format("long %d", l);
}
else if (obj instanceof Double d) {
formatted = String.format(“double %f", d);
}
else if (obj instanceof String s) {
formatted = String.format("String %s", s);
}// ... use formatted variable ...
这个例子中最有趣的地方是instanceof模式匹配可以扩展到其他的语法结构中。首先,我们应该可以想到switch表达式。
String formatted =
switch (obj) {
case Integer i -> String.format("int %d", i);
case Byte b -> String.format("byte %d", b);
case Long l -> String.format("long %d", l);
case Double d -> String.format("double %f", d);
case String s -> String.format("String %s, s);
default -> String.format("Object %s", obj);
};// ... use formatted variable
String literal = "This is a string splitted " +
"in several smaller " +
"strings.";
使用转义序列符“\”,在Java 14中我们可以像下面这样来改写上面的代码:
String text = """
This is a string splitted \
in several smaller \
strings.\
""";
由于字符文本和传统字符串文本不允许嵌入换行符,因此转义序列符“\”仅适用于文本块。
String colors = """
red \s
green\s
blue \s
""";
注意:这个将在Java 14中引入的新转义序列符(\s)也可以用于传统的字符串文本。
record Point(int x, int y) { }
这个写法相当于下面的类声明:
final class Point {
public final int x;
public final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
// state-based implementations of equals, hashCode, toString
// nothing else
}
为了在Java 14中引入这种新类型,需要在Java.lang.Class对象中添加如下两个新方法:
RecordComponent[] getRecordComponents()
boolean isRecord()
这两个方法的目的是更新Java Reflection API,以便将记录类型纳入其中。
支持本地打包格式,为用户提供自然的安装体验;
打包时可以指定启动参数;
通过命令行或使用ToolProvider API的程序来启动。
热 文 推 荐
☞量子算命,在线掷筊:一个IBM量子云计算机的应用实践,代码都有了