【发布时间】:2020-02-07 21:27:02
【问题描述】:
我正在尝试追查为什么 Java 流中的 .orElseThrow 会发生特定行为。这个代码块
private SomeContainer getSomeContainerFromList(SomeContainerList containerList, String containerId) {
return containerList.stream()
.filter(specificContainer -> specificContainer.getId().equals(containerId))
.findAny()
.orElseThrow(() -> {
String message = "some special failure message";
log.error(message);
throw new CustomInternalException(message)});
}
导致此错误:unreported exception X; must be caught or declared to be thrown
我不想报告异常,因为这会导致我将其添加到与之交互的所有其他方法中。
但是,当我删除花括号的 lambda 表达式时,只留下要抛出的新异常,如下所示:
private SomeContainer getSomeContainerFromList(SomeContainerList containerList, String containerId) {
return containerList.stream()
.filter(specificContainer -> specificContainer.getId().equals(containerId))
.findAny()
.orElseThrow(() -> new CustomInternalException("some special failure message"));
}
它编译得很好,并且不再需要报告异常,但是,我无法在该 .orElseThrow 语句中记录消息或执行任何其他逻辑。
为什么会这样?我看到了一种similar question,它解释了这可能是 JDK 中的一个错误,但我想确保在我的情况下是这种情况。
【问题讨论】:
-
在
java-8标签下,阅读two questions back
标签: java exception java-8 java-stream