我编译失败
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);
}));