为了账号安全,请及时绑定邮箱和手机立即绑定

在封闭的 switch 表达式之外返回

在封闭的 switch 表达式之外返回

慕斯709654 2023-02-23 14:28:14
我在 Java 12 中使用开关表达式¹将字符串转换为HTTP 方法:static Optional<RequestMethod> parseRequestMethod(String methodStr) {    return Optional.ofNullable(          switch (methodStr.strip().toUpperCase(Locale.ROOT)) {              case "GET" -> RequestMethod.GET;              case "PUT" -> RequestMethod.PUT;              case "POST" -> RequestMethod.POST;              case "HEAD" -> RequestMethod.HEAD;              default -> {                  log.warn("Unsupported request method: '{}'", methodStr);                  return null;              }          });}我想警告默认分支中不受支持的方法并返回 null(然后将其包装在 Optional 中)。但是上面的代码会导致编译器错误:在封闭的 switch 表达式之外返回我如何让它编译?为了完整起见,这里是枚举的定义RequestMethod:enum RequestMethod {GET, PUT, POST, HEAD}¹ switch 表达式作为预览功能在 Java 12 中引入。
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

yield在 Java 13 中使用

在 Java 13 中,switch 表达式使用新的受限标识符¹yield从块中返回值:


return Optional.ofNullable(

        switch (methodStr.strip().toUpperCase(Locale.ROOT)) {

            case "GET" -> RequestMethod.GET;

            // ... rest omitted


            default -> {

                log.warn("Unsupported request method: '{}'", methodStr);

                // yield instead of return

                yield null;

            }

        });

break在 Java 12 中使用

在 Java 12 中,switch 表达式用于break从块中返回值:


return Optional.ofNullable(

        switch (methodStr.strip().toUpperCase(Locale.ROOT)) {

            case "GET" -> RequestMethod.GET;

            // ... rest omitted


            default -> {

                log.warn("Unsupported request method: '{}'", methodStr);

                // break instead of return

                break null;

            }

        });

¹yield不是关键字,正如用户 skomisa 所指出的那样。



查看完整回答
反对 回复 2023-02-23
  • 1 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号