在“可选”源代码中,我发现了以下函数:
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
if (value != null) {
return value;
} else {
throw exceptionSupplier.get();
}
}
我的问题是,如果我把函数改成这个,它看起来是一样工作的
public <X extends Throwable> T orElseThrow(Supplier<X> exceptionSupplier) throws X {
if (value != null) {
return value;
} else {
throw exceptionSupplier.get();
}
}
有人知道原因吗?
1条答案
按热度按时间jgovgodb1#
考虑以下方法:
这表明它把将军
IOException
,但具体抛出了一个更具体的异常,FileNotFoundException
.与相同
orElseThrow
:通过接受上限供应商,它可以抛出更具体的异常类型。这种差别在大多数情况下是无关紧要的,因为你总能抓住机会/
throws
更一般的异常类型。我认为这可能会有所不同的一个例子是当你接受Supplier
作为参数:您可以使用以下任一供应商作为参数来调用它:
但是没有上限你就不能做后者
Supplier<? extends X>
.