Java 13 为 switch
表达式引入了 yield
关键字。
我如何使用它以及默认值 return
或 break
值有什么区别?
原文由 zerocewl 发布,翻译遵循 CC BY-SA 4.0 许可协议
Java 13 为 switch
表达式引入了 yield
关键字。
我如何使用它以及默认值 return
或 break
值有什么区别?
原文由 zerocewl 发布,翻译遵循 CC BY-SA 4.0 许可协议
作为 JEP 354 (Java 13) 的一部分,您可以在 switch 中 产生 值(可选择将其分配给变量)
yield 语句产生一个值,该值成为封闭的 switch 表达式的值。
int j = switch (day) { case MONDAY -> 0; case TUESDAY -> 1; default -> { int k = day.toString().length(); int result = f(k); yield result; } };
我认为您对 Java 12 上使用 break 返回值的 JEP 325 感到困惑:
我们扩展了 break 语句以获取一个参数,该参数成为封闭的 switch 表达式的值。
int j = switch (day) { case MONDAY -> 0; case TUESDAY -> 1; default -> { int k = day.toString().length(); int result = f(k); break result;
此外,您甚至可以使用 lambda 语法
boolean result = switch (ternaryBool) { case TRUE -> true; case FALSE -> false; case FILE_NOT_FOUND -> throw new UncheckedIOException( "This is ridiculous!", new FileNotFoundException()); // as we'll see in "Exhaustiveness", `default` is not necessary default -> throw new IllegalArgumentException("Seriously?! 🤬"); };
使用 switch 表达式,整个 switch 块“获得一个值”,然后可以对其进行赋值;你可以使用 lambda 风格的语法
虽然 Java 12 引入并改进了 switch 表达式,但它们是作为预览语言功能进行的。这意味着 (a) 它仍然可以在接下来的几个版本中改变(就像它在 12 到 13 之间所做的那样)和 (b) 它需要在编译时和运行时使用新的命令行选项 –enable- 解锁预习。然后 请记住,这不是 switch 的最终结果——它只是通向完整模式匹配的一步。
原文由 user7294900 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答1.3k 阅读✓ 已解决
4 回答1.2k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
2 回答724 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.7k 阅读
2 回答1.3k 阅读
问答
return
语句将控制返回给 方法( §8.4 , §15.12 )或 构造函数( §8.8 , §15.9 )的调用者,而yield
语句通过switch
封闭 转移控制---
表达式 产生指定值。break
with value 语句被删除,取而代之的是yield
语句。规格
JLS 13 附带 了 JEP 354 规范, 它总结了我们需要了解的关于新
switch
的所有信息。请注意,它没有合并到语言规范中,因为它仍然 是一个预览功能,因此还不是语言的永久部分。