我正在使用Java 12中的switch表达式¹将字符串转换为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}
Java 12引入了预览功能的switch表达式。
RequestMethod.valueOf(methodStr.strip().toUpperCase(Locale.ROOT))
? - VGRbreak
、continue
或者return
到其他上下文中,除了正常完成(带有一个值;在12中为break value
,在13中改为yield value
)或抛出异常的情况。 - Brian Goetz