提问者:小点点

具有模式匹配的 Java 17 空大小写


我有一个使用 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的一部分吗?我做错了什么?


共0个答案