像对待您阅读的任何其他通用代码一样对待它。
这是我在Java
8的源代码中看到的正式签名:
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X
X
的上限为Throwable
。稍后这将很重要。- 我们返回一个类型
T
,其势必会Optional
的T
- 我们期望的
Supplier
通配符上限为X
- 我们抛出
X
(这是有效的,因为X
其上限为Throwable
)。这在JLS 8.4.6中指定;只要X
被视为的子类型Throwable
,则其声明在此是有效且合法的。
关于Javadoc的误导存在一个公开的错误。在这种情况下,最好是信任源代码而不是文档,直到该错误被声明为已修复。
至于为什么我们使用
throws X而不是
throws Throwable:
X一定要绑定到
Throwable最上层。如果您想要更具体的内容
Throwable(运行时,检查的或
Error),那么仅仅抛出
Throwable将不会给您带来灵活性。
最后一个问题:
是否需要在catch(Throwable t)子句中捕获此方法?
__链下的 某些事物
必须处理异常,例如是
try...catch块还是JVM本身。理想情况下,人们希望创建一个
Supplier可以最好地传达其需求的异常的绑定。你不必(并且可能应该
不是 )创建一个
catch(Throwable t)针对这种情况;
如果您
Supplier的类型绑定到需要处理的特定异常,那么最好在
catch以后的处理中使用它。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)