我正在使用jdk-19预览模式匹配来尝试一个非常简单的示例:
static String asString(Object value) {
return switch (value) {
case String s && s.length() > 10 -> "bigger then 10 : " + s;
case String s -> "less then 10 " + s;
case Collection<?> c -> "collection : " + c;
case null -> "null";
default -> value.toString();
};
}令我惊讶的是,这不能用jdk-19进行编译,但是在jdk-17中工作得很好。这是一个有意的改变还是一个小错误?
错误是:
One.java:13: error: : or -> expected
case String s && s.length() > 10 -> "bigger then 10 : " + s;
^
One.java:13: error: illegal start of expression
case String s && s.length() > 10 -> "bigger then 10 : " + s;
^
One.java:13: error: ';' expected
case String s && s.length() > 10 -> "bigger then 10 : " + s;
^
One.java:13: error: not a statement
case String s && s.length() > 10 -> "bigger then 10 : " + s;
^
Note: One.java uses preview features of Java SE 19.
Note: Recompile with -Xlint:preview for details.
4 errors也是java -version
openjdk version "19" 2022-09-20
OpenJDK Runtime Environment (build 19+37)
OpenJDK 64-Bit Server VM (build 19+37, mixed mode, sharing)发布于 2022-10-21 08:45:19
您可能应该使用when子句
static String asString(Object value) {
return switch (value) {
// Note the `when` here
case String s when s.length() > 10 -> "bigger then 10 : " + s;
case String s -> "less then 10 " + s;
case Collection<?> c -> "collection : " + c;
case null -> "null";
default -> value.toString();
};
}https://stackoverflow.com/questions/74150784
复制相似问题