Я пытаюсь отследить, почему специфическое c поведение происходит с .orElseThrow
в потоке Java. Этот блок кода
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
Я не хочу сообщать об исключении, потому что это заставило бы меня добавить это к любой другой метод, который взаимодействует с этим.
Однако, когда я удаляю лямбда-выражение с фигурными скобками, оставляя только новое исключение, которое должно быть выброшено, например, так:
private SomeContainer getSomeContainerFromList(SomeContainerList containerList, String containerId) {
return containerList.stream()
.filter(specificContainer -> specificContainer.getId().equals(containerId))
.findAny()
.orElseThrow(() -> new CustomInternalException("some special failure message"));
}
Он прекрасно компилируется, и исключение больше не нужно сообщается, однако, я не могу войти в сообщение или сделать любую другую логи c в этом .orElseThrow
утверждении.
Почему это происходит? Я видел подобный вопрос , который объясняет, что это может быть ошибкой в JDK, но я хочу убедиться, что это так и есть в моей ситуации.