GUAVA--基础工具(Throwables)

一、异常传播

有时候,你会想把捕获到的异常再次抛出。这种状况一般发生在 Error 或 RuntimeException 被捕获的时候,你 没想捕获它们,可是声明捕获 Throwable 和 Exception 的时候,也包括了了 Error 或 RuntimeException。G uava 提供了若干方法,来判断异常类型而且从新传播异常。例如:java

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

全部这些方法都会本身决定是否要抛出异常,但也能直接抛出方法返回的结果——例如,throw Throwables.pro pagate(t);—— 这样能够向编译器声明这里必定会抛出异常。编码

传递异常的经常使用方法:code

  • RuntimeException propagate(Throwable):把throwable包装成RuntimeException,用该方法保证异常传递,抛出一个RuntimeException异常
  • void propagateIfInstanceOf(Throwable, Class<X extends Exception>) throws X:当且仅当它是一个X的实例时,传递throwable
  • void propagateIfPossible(Throwable):当且仅当它是一个RuntimeException和Error时,传递throwable
  • void propagateIfPossible(Throwable, Class<X extends Throwable>) throws X:当且仅当它是一个RuntimeException和Error时,或者是一个X的实例时,传递throwable。

可是,以上四个方法所有停用了,因此对异常传播就不在继续深刻了解了。对象

二、检查

Guava 提供了以下三个有用的方法,让研究异常的缘由链变得稍微简便了,这三个方法的签名是不言自明的:继承

// 返回一个最里面的throwable对象,,第一个throwable将会在错误或异常被发现时进入处理链上下文
Throwable getRootCause(Throwable)

// 获取一个throwable链,以list集合的方式,第一个entry在集合中将会抛出跟着他的cause继承,记录他这是一个cause链快照,他将不会反射到任何随后的cause链中。这个方法是@Beta注释的。
List<Throwable> getCausalChain(Throwable)

//返回一个字符串包含着throwable实例的tostring结果,经过完整的递归这个throwable,记录他,你该不会擦除这个字符串结果,若是你须要编码这个栈帧,你能够调用getStackTrace()方法。
String getStackTraceAsString(Throwable)

三、小结

递归

相关文章
相关标签/搜索