【发布时间】:2021-10-27 09:59:09
【问题描述】:
假设有一个Optional optString。现在,如果我按如下方式使用它:
optString.ifPresent({
//some statements
}, () -> throw new Exception());`, it fails to compile.
为什么我必须将throw new Exception() 包裹在花括号{} 内。
为什么我不能简单地做() -> throw new Exception。
为什么编译器将throw 和new 视为某些状态应该在一个块中?
在 IntelliJ 中失败并出现编译错误:expected ) expected { expected; 和 Unexpected token
一个完整的例子:
class OptionalTest {
Optional<String> testString() {
return Optional.empty();
}
void getString() {
var optStr = testString();
optStr.ifPresentOrElse(s -> {
}, () -> throw new RuntimeException());
}
}
【问题讨论】:
-
请发布完整示例
-
@SotiriosDelimanolis:恕我直言,标签
optional和java-8非常重要,因为optional通过适当的方法选择解决了问题,而java-8是Java 的版本(可用的方法不同版本)。