模式匹配实例

Pattern matching instanceof

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

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

错误说:

Patterns in 'instanceof' are not supported at language level '14'

Error:(36, 34) java: pattern matching in instanceof is a preview feature and is disabled by default. (use --enable-preview to enable pattern matching in instanceof)

但我安装了 Java 14。

这是 Java 14 中的预览功能,请参阅 JEP 305 and JEP 375。要启用此功能,请将 class 编译为:

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(..) ..}

此功能已在 Java 16 (JEP 394) 中完成。 对于以下版本,请参考 this link 从 IDE(如 IntelliJ、Eclipse 和 STS)启用此预览功能。