如何在返回值的Switch Expressions中使用带代码块的case语句?
Java 14 Switch表达式中代码块返回值的正确写法
你提到的第三种写法不能直接用return实现,但有对应的正确语法——使用yield关键字代替return来给switch表达式返回值。
原因很明确:
- 第一个示例是switch语句,它是执行逻辑的语句,不需要产生返回值,所以代码块里直接写执行代码即可。
- 第二个示例是switch表达式,它属于表达式范畴,必须产生一个值,所以用箭头直接返回单个值是合法的。
- 第三个示例想要在switch表达式的代码块里执行多步操作后返回值,此时不能用
return——因为return会被解析为返回整个foo方法,而非给switch表达式提供值。Java 14专门为这种场景引入了yield关键字,用来明确指定switch表达式的返回值。
修正后的可行代码如下:
static void foo(String x) { // 原switch语句写法(正常工作) switch(x) { case "hi" -> { System.out.print("got hi"); System.out.println("hello"); } default -> System.out.println("bye"); } // 原switch表达式单值返回写法(正常工作) var y = switch(x) { case "hi" -> "hello"; default -> "bye"; }; // 修正后的switch表达式代码块返回写法(可行) var z = switch(x) { case "hi" -> { System.out.println("got hi"); yield "hello"; // 用yield给变量z返回值 } default -> "bye"; }; }
yield的作用就是在switch表达式的代码块中,明确产出表达式的结果值,完美匹配你想要的“在代码块里执行操作后返回值给变量”的需求。
内容的提问来源于stack exchange,提问作者Paul C
相关产品推荐
相关产品推荐

