gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:11:17 26 4
gpt4 key购买 nike

我在 Java 12 中使用开关表达式¹将字符串转换为 HTTP method :

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 中)。

但是上面的代码会导致编译错误:

Return outside of enclosing switch expression

我如何编译它?


为了完整起见,这里是 RequestMethod 枚举的定义:

enum RequestMethod {GET, PUT, POST, HEAD}

¹ <子> switch expressions作为预览功能在 Java 12 中引入。

最佳答案

在 Java 13 中使用 yield

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

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;
}
});

在 Java 12 中使用 break

在 Java 12 中,switch 表达式使用 break 从 block 中返回一个值:

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;
}
});

¹ yieldnot a keyword ,正如用户 skomisa 所指出的那样。

关于java - 在封闭的 switch 表达式之外返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56806905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com