Scala Try / Future,在发生故障时包装异常

时间:2013-12-13 15:34:31

标签: scala try-catch functor

假设我有一个方法def doSomething: String,如果出现问题,可以提出DoSomethingException

如果我写Try(doSomething),是否有一种简单的方法来映射异常而不恢复它?

基本上,我希望失败成为由BusinessException引起的DoSomethingException

我知道执行此操作的代码非常简单,但是没有任何内置运算符可以执行此操作吗?这似乎是一种非常常见的操作,但我在API中找不到任何内容。

4 个答案:

答案 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)
  }