前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Guava 指南 之「Throwable」

Guava 指南 之「Throwable」

作者头像
CG国斌
发布2018-01-08 17:49:17
7320
发布2018-01-08 17:49:17
举报
文章被收录于专栏:维C果糖维C果糖

异常传播

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

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

代码语言:javascript
复制
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)

当出现RuntimeException、Error或者X时,抛出throwable

Throwables.propagate的使用

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

异常原因链

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

Throwable getRootCause(Throwable)

List<Throwable> getCausalChain(Throwable)

String getStackTraceAsString(Throwable)

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-09-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 异常传播
    • Throwables.propagate的使用
      • 异常原因链
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档