模式匹配实例
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)启用此预览功能。
我在 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)启用此预览功能。