Guava的异常工具类--Throwables
Guava为我们提供了一个非常方便并且实用的异常处理工具类:Throwables类。
这个类的官方英文简述:https://code.google.com/p/guava-libraries/wiki/ThrowablesExplained
下面是本人的一些简要总结:
我们在日常的开发中遇到异常的时候,往往需要做下面的几件事情中的一些:
1. 将异常信息存入数据库、日志文件、或者邮件等。
2. 将受检查的异常转换为运行时异常
3. 在代码中得到引发异常的最低层异常
4. 得到异常链
5. 过滤异常,只抛出感兴趣的异常
而借助于Guava的Throwables,我们可以很方便的做到这些:
以list的方式得到throwable的异常链:
static List<Throwable> getCausalChain(Throwable throwable)
返回最底层的异常
static Throwable getRootCause(Throwable throwable)
返回printStackTrace的结果string
static String getStackTraceAsString(Throwable throwable)
把受检查的异常转换为运行时异常:
public static RuntimeException propagate(Throwable throwable)
只抛出感兴趣的异常:
public static <X extends Throwable> void propagateIfInstanceOf(
@Nullable Throwable throwable, Class<X> declaredType) throws X
下面用官网的例子说大致说一下吧:
try {
someMethodThatCouldThrowAnything();
} catch (IKnowWhatToDoWithThisException e) {
handle(e);
} catch (Throwable t) {
Throwables.propagateIfInstanceOf(t, IOException.class);
Throwables.propagateIfInstanceOf(t, SQLException.class);
throw Throwables.propagate(t);
}
上面的例子中,只抛出感兴趣的IOException或者SQLException,至于其他的异常直接转换为运行时异常。
try {
someMethodThatCouldThrowAnything();
} catch (IKnowWhatToDoWithThisException e) {
handle(e);
} catch (Throwable t) {
Throwables.propagateIfPossible(t);
throw new RuntimeException("unexpected", t);
}
propagateIfPossible方法只会对RuntimeException或者Error异常感兴趣
try {
someMethodThatCouldThrowAnything();
} catch (IKnowWhatToDoWithThisException e) {
handle(e);
} catch (Throwable t) {
Throwables.propagateIfPossible(t, OtherException.class);
throw new RuntimeException("unexpected", t);
}
propagateIfPossible的另外一个重载方法,容许我们来自己指定一个感兴趣的异常。这样这个方法只会对RuntimeException或者Error和我们指定的这3种异常感兴趣。
T doSomething() {
try {
return someMethodThatCouldThrowAnything();
} catch (IKnowWhatToDoWithThisException e) {
return handle(e);
} catch (Throwable t) {
throw Throwables.propagate(t);
}
}
上面的方法会将受检查的异常转换为运行时异常。
Guava的异常工具类--Throwables的更多相关文章
- ExceptionHelper异常工具类
using System;using System.Collections.Generic;using System.Text; namespace JiaWel.Utilities{ public ...
- Futures工具类使用
Futures是guava提供的工具类,全类名是com.google.common.util.concurrent.Futures.配合MoreExecutors使用,效果极佳. 主要方法如下: 1. ...
- Guava ---- Ordering排序工具
使用Guava的排序工具类, 高速实现对象的单变量排序和多变量排序, 让你的开发效率爆炸... import com.google.common.collect.Lists; import com.g ...
- MoreExecutors工具类使用
MoreExecutors是guava提供的工具类,是对jdk自带的Executors工具类的扩展,主要方法如下: 1.addDelayedShutDown()方法的两个重载: public stat ...
- Guava库介绍之实用工具类
作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...
- Guava工具类
原文链接:http://blog.csdn.net/mnmlist/article/details/53425865 Objects类 Objects类有几个比较不错的方法,toString.hash ...
- Google guava工具类的介绍和使用
概述 工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率.谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来.所以就诞生了guava.. 高效设计良好的API ...
- Guava 常用工具类
引入guava包: <dependency> <groupId>com.google.guava</groupId> <artifactId>guava ...
- 工具篇:介绍几个好用的guava工具类
前言 平时我们都会封装一些处理缓存或其他的小工具.但每个人都封装一次,重复造轮子,有点费时间.有没有一些好的工具库推荐-guava.guava是谷歌基于java封装好的开源库,它的性能.实用性,比我们 ...
随机推荐
- struts2 DMI
在使用DMI(动态方法调用)的时候要注意struts.xml配置时要把 <constant name="struts.enable.DynamicMethodInvocation&qu ...
- Theano1.1-安装
之前一直想弄theano,可是python不是很懂,在学习了一段时间之后开始安装theano.当然官网上的安装资料是全,可是也太繁琐了.这里介绍的是最简单,最方面的安装theano的方法.官网首页:h ...
- 单片机C语言探究--为什么变量最好要赋初值
有许多书上说,变量最好要赋初值.但是为什么要初值呢?不赋初值可能会出现什么样的意外呢?以下就我在以51单片机为MCU,Keil为编译器看到的实现现象作分析.众所周知,变量是存储在RAM中,掉电后即丢失 ...
- jQuery学习笔记(四):attr()与prop()的区别
这一节针对attr()与prop()之间的区别进行学习. 先看看官方文档是如何解释两者之间功能差异的: attr() Get the value of an attribute for the fir ...
- VS代码管理插件AnkhSvn
下载AnKHSvn软件,启动VS,源代码管理工具选择AnKHSvn 在视图-〉其它窗口-〉Pending Change->提交变化的更改
- nios II--实验3——led 100M软件部分
软件开发 参照实验二(led),该实验与实验二(led)的不同之处在于系统的时钟由50M提成为100M.运行结果,在调试窗口输出Hello from Nios II!,并且板上的四个LED灯流动显示, ...
- [bzoj 3531][SDOI2014]旅行(树链剖分+动态开点线段树)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3531 分析: 对于每个颜色(颜色<=10^5)都建立一颗线段树 什么!那么不是M ...
- Hibernate Tools 自动生成hibernate的hbm文件
本文有待商榷 当我们在新增插件的时候发现会出现duplicate location,意思是所选的anchive所包含的zip路径已经复用,现象如下: 如上图所示黄色标记部分“Duplicate loc ...
- FlashFXP|FTP
经典的FTP传输工具FlashFxp,留作几年吧!看和曾经用的软件代表着岁月的流逝和时间的推进性! 洒脱度过生活中的每一天.每一分钟,Mvpbang追随一生! 压缩包中有秘钥文件-flashfxp.k ...
- 69 su -用户和工作组管理
su su命令用户和工作组管理 su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码. 语法 su (选项) (参数) 选项 -c<指令>或--command= ...