1

我在https://www.baeldung.com/java-pattern-matching-instanceof上遇到了这个惊人的话题。但是当我尝试运行以下代码时,它会引发编译时错误:

if(obj instanceof String s) {
    System.out.println(s);
}

错误说:

语言级别“14”不支持“instanceof”中的模式

错误:(36, 34) java: instanceof 中的模式匹配是一项预览功能,默认情况下处于禁用状态。(使用 --enable-preview 在 instanceof 中启用模式匹配)

但是我安装了 Java 14。

4

2 回答 2

11

这是 Java 14 中的预览功能,请参阅JEP 305JEP 375。要启用此功能,请使用以下命令编译您的类:

javac MainClass.java --enable-preview --release 14

现在你可以这样做:

java MainClass --enable-preview

示例instanceof

Object o = "Hello World!";
if(o instanceof String s) {
    // no explicit type casting
    s = s.replaceFirst("World", "Java"); // No compile time issues
    System.out.println(s);
}

从 JEP 复制的另一个示例:

if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}
于 2020-05-21T17:14:18.813 回答
1

此功能在 Java 16 ( JEP 394 ) 中完成。对于以下版本,请参阅链接以从 IntelliJ、Eclipse 和 STS 等 IDE 启用此预览功能。

于 2021-10-23T05:37:03.017 回答