如何在 Java 中使用 .orElseThrow 从 lambda 表达式中抛出异常



我编译失败

Compilation failure
[ERROR]  unreported exception java.lang.Throwable; must be caught or declared to be thrown

为什么这段代码不编译

Collections.singletonList(Arrays.asList("a", "b", "c")
.stream()
.findAny()
.orElseThrow(() -> {
String msg = "Failed";
throw new IllegalArgumentException(msg);
}));

虽然这似乎没问题

Collections.singletonList(Arrays.asList("a", "b", "c")
.stream()
.findAny()
.orElseThrow(() -> new IllegalArgumentException("Failed")));

这与 https://bugs.openjdk.java.net/browse/JDK-8056983 有关还是第一个代码块错误?

在VS Code和Eclipse中,我没有从IDE收到语法错误。

这两个代码片段是不同的。在第一个中,您在 lambda 中抛出异常。在第二个中,您lambda 返回异常。

要使两个代码段保持一致,请将第一个代码段更改为

Collections.singletonList(Arrays.asList("a", "b", "c")
.stream()
.findAny()
.orElseThrow(() -> {
String msg = "Failed";
return new IllegalArgumentException(msg);
}));

最新更新