我使用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