我使用util.control.Exception.catching
內部異常轉換爲具體到我的庫中的異常類型:使用捕捉(...)可以避免重複投擲Throwable嗎?
import util.control.Exception._
abstract class MyException extends Exception
case class ErrorOccurredDuringFoo(e : Exception) extends MyException
def foo : Foo = {
catching(classOf[Exception]) either { fooInternals } match {
case Left(e) => throw ErrorOccurredDuringFoo(e)
case Right(v) => v
}
}
不幸的是,這是行不通的。應用由either
返回的Catch
不返回Either[Exception,Foo]
,它返回Either[Throwable,Foo]
。但我已經告訴catching
我希望它只捕獲Exception
的子類型,而不是全部Throwable
s,並且在內部它已經匹配Exception
。
我正確使用它?難道我不能說服catching
返回它捕獲的異常作爲我要求它捕獲的異常類的一個實例嗎?我最好只是添加一個冗餘asInstanceOf[Exception]
?我寧願不能,如果我可以避免它,因爲catching
實例可以邏輯地在其他地方創建,並且如果我有一天將其更改爲catching[Throwable]
而不更改ErrorOccurredDuringFoo
而不是在演員陣容時發生運行時錯誤,我想要編譯錯誤到Exception
失敗。
謝謝!這最終會更好。 – Ben