如您所知,Java 12 引入了 switch 语句来生成可以分配的值。
但它似乎不适用于具有代码块的 case 语句。 我不确定我的语法是否正确或者这是不允许的。
我很好奇,因为它与非右值 switch 语句(第一个示例)不一致。 另外,我已经在其他语言中看到过这个。
static void foo(String x) {
// this works
switch(x) {
case "hi" -> {
System.out.print("got hi");
System.out.println("hello");
}
default -> System.out.println("bye");
}
// this works
var y = switch(x) {
case "hi" -> "hello";
default -> "bye";
};
// is this possible?
var z = switch(x) {
case "hi" -> {
System.out.println("got hi");
return "hello"; // return "hello" to the z
}
default -> "bye";
};
}
而不是
return
,关键字是yield
:
var z = switch(x) {
case "hi" -> {
System.out.println("got hi");
yield "hello";
}
default -> "bye";
};
这不仅仅适用于带有
-> { ... }
的开关。您也可以在带标签的 switch 表达式中使用它:
var z = switch(x) {
case "hi":
System.out.println("got hi");
yield "hello";
default:
yield "bye"
};