假设我有一个方法def doSomething: String
,如果出现问题,可以提出DoSomethingException
。
如果我写Try(doSomething)
,是否有一种简单的方法来映射异常而不恢复它?
基本上,我希望失败成为由BusinessException
引起的DoSomethingException
。
我知道执行此操作的代码非常简单,但是没有任何内置运算符可以执行此操作吗?这似乎是一种非常常见的操作,但我在API中找不到任何内容。
答案 0 :(得分:21)
恢复:
val c = scala.util.Try(doSomething).recover {
case e: DoSomethingException => throw new BusinessException
}
答案 1 :(得分:14)
您可以使用transform
val t = Failure(new DoSomethingException)
val bt = t.transform(s => Success(s), e => Failure(new BusinessException))
答案 2 :(得分:3)
您也可以使用recoverWith
:
Try {
doSomething
} recoverWith {
case e: DoSomethingException => Failure(new BusinessException)
}
答案 3 :(得分:0)
您也可以尝试使用PartialFunction(如果没有失败则打开值):
Try(doSomething) match {
case Success(result) => result
case Failure(throwable) => new BusinessException(throwable)
}