scala非致命的例子

lhcgjxsq  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(347)

我试图模拟这样一种情况:我的代码抛出了一个非致命代码,它在恢复后做了其他事情。比如:

Try {
// do something
} recover {
  case NonFatal(e) => println("I want to get to this point")
}

我试着用嘲弄来 when(mock.doMethodThatCallsTry).thenThrow(non-fatal) 但是我在scala文档上找不到一个非致命的例子来模拟这种情况。

kyks70gy

kyks70gy1#

nonfatal是定义非致命错误的scala对象。这里是定义

object NonFatal {
/**

* Returns true if the provided `Throwable` is to be considered non-fatal, or false if it is to be considered fatal
* /

    def apply(t: Throwable): Boolean = t match {
    // VirtualMachineError includes OutOfMemoryError and other fatal errors
    case _: VirtualMachineError | _: ThreadDeath | _: InterruptedException | _: LinkageError | _: ControlThrowable => false
             case _ => true
     }
     /**
     * Returns Some(t) if NonFatal(t) == true, otherwise None
     */
     def unapply(t: Throwable): Option[Throwable] = if (apply(t)) Some(t) else None
}

这意味着抛出的每个异常(除了致命的异常)都将在该案例中被捕获

case NonFatal(e) => println("I want to get to this point")

因为在不适用的情况下,非致命异常是一些(t),而致命异常是无。看到了吗https://docs.scala-lang.org/tour/extractor-objects.html 供参考。
您可以抛出任何非致命异常。

相关问题