亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在封閉的 switch 表達式之外返回

在封閉的 switch 表達式之外返回

慕斯709654 2023-02-23 14:28:14
我在 Java 12 中使用開關表達式1將字符串轉換為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}1 switch 表達式作為預覽功能在 Java 12 中引入。
查看完整描述

1 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

yield在 Java 13 中使用

在 Java 13 中,switch 表達式使用新的受限標識符1yield從塊中返回值:


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;

            }

        });

1yield不是關鍵字,正如用戶 skomisa 所指出的那樣。



查看完整回答
反對 回復 2023-02-23
  • 1 回答
  • 0 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號