关于异常:Java 8 orElseThrow:为什么编译器不抱怨该方法没有“抛出”

Java 8 orElseThrow: why is compiler not complaining that method does not have a “throws”

本问题已经有最佳答案,请猛点这里访问。

我有以下代码:

1
2
3
4
public Trail getNewestTrail() {
    return trails.stream().max(Comparator.comparing(Trail::getTimestamp)).orElseThrow(NoSuchElementException::new);

}

如果没有将getNewestTrail声明为抛出异常,我没有看到任何错误 - 为什么?


NoSuchElementExceptionjava.lang.RuntimeException扩展,它是未选中的异常:

Java programming language does not require methods to catch or to
specify unchecked exceptions (RuntimeException, Error, and their
subclasses)

您只需要在方法签名中指定已检查的异常。


NoSuchElementExceptionRuntimeException,无需在编译时处理它们。

只是要检查,用Exception替换NoSuchElementException,它将开始给你一个编译失败。