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)

三、小結

遞歸

相關文章
相關標籤/搜索