我有一个使用 Eclipse 2022-03 和 OpenJDK 17 的 Java 17 项目:
openjdk 17.0.2 2022-01-18
OpenJDK Runtime Environment Temurin-17.0.2+8 (build 17.0.2+8)
OpenJDK 64-Bit Server VM Temurin-17.0.2+8 (build 17.0.2+8, mixed mode, sharing)
我正在尝试使用新的Java17开关功能,所以我尝试了一种方法:
return switch(testEnum) {
case foo -> newFoo();
case bar -> newBar();
}
这工作正常。但后来我尝试了这个(因为该值可能为 null
):
return switch(testEnum) {
case foo -> newFoo();
case bar -> newBar();
case null -> newDefault();
}
Eclipse用红色在null
下划线并说:
Switch 中的模式匹配是一项预览功能,默认情况下处于禁用状态。使用 --启用预览启用
通过Maven编译会产生:
[ERROR] /project/src/main/java/com/example/FooBar.java:[432,38] null in switch cases is a preview feature and is disabled by default.
[ERROR] (use --enable-preview to enable null in switch cases)
我的 Maven 项目有:
<properties>
<maven.compiler.release>17</maven.compiler.release>
</properties>
我知道编译器发布设置没有被忽略;否则,它将默认为Java 8(按照我父母的POM ),并且根本不允许模式匹配。
带有模式匹配的null大小写不是Java17的一部分吗?我做错了什么?