Guava 指南 之「Throwable」

来源:互联网 发布:正版天虹打带软件下载 编辑:程序博客网 时间:2024/05/17 23:42

异常传播

有时候,当你捕获一个异常时,你可能想将它抛到下一个try/catch块。这样情况很常见,例如在出现RuntimeExceptionError的情况下,不需要try/catch块,你也不想捕获它们,但是它们仍然被try/catch块捕获。

Guava 提供了一些工具类来简化异常传播。例如:

try {     someMethodThatCouldThrowAnything();} catch (IKnowWhatToDoWithThisException e) {     handle(e);} catch (Throwable t) {     Throwables.propagateIfInstanceOf(t, IOException.class);     Throwables.propagateIfInstanceOf(t, SQLException.class);     throw Throwables.propagate(t);}

每一个方法都抛了异常,而抛出的结果,例如Throwables.propagate(t),可以证明编辑器抛出了一个很有用的异常。

下面是 Guava 提供的异常传播方法的摘要:

方法签名 解释 RuntimeException propagate(Throwable) 通过RuntimeException或者Error进行异常传播,或者将异常包装进RuntimeException,可以保证异常的传播性。由于其返回类型是一个RuntimeException,所以你可以通过throw Throwables.propagate(t)抛出异常,而且 Java 可以识别这样的语句,并保证抛出一个异常。 void propagateIfInstanceOf(Throwable, Class) throws X 当且仅当异常实例为X的时候,进行异常传播。 void propagateIfPossible(Throwable) 当出现RuntimeException或者Error时,抛出throwable void propagateIfPossible(Throwable) 当出现RuntimeExceptionError或者X时,抛出throwable

Throwables.propagate的使用

详见「为什么我们不赞成使用 Throwables.propagate」

异常原因链

Guava 提供了三个有用的方法,使得异常链的研究更加简单,通过这三个方法的签名就可以窥知一二:

Throwable getRootCause(Throwable) List<Throwable> getCausalChain(Throwable) String getStackTraceAsString(Throwable)

翻译声明:本文翻译自 GitHub,Google Guava - ThrowablesExplained.


———— ☆☆☆ —— 返回 -> Guava 中文指南 <- 目录 —— ☆☆☆ ————

原创粉丝点击