【问题标题】:Why does Scala Try not catching java.lang.StackOverflowError?为什么 Scala 尝试不捕获 java.lang.StackOverflowError?
【发布时间】:2016-06-27 20:28:37
【问题描述】:

我有一些函数可以(可能)产生 StackOverflowError。当然,这是一个糟糕设计的标志,但现在我决定将它包装到 Try 中。

Try{
  Calculator.eval(..)
}

我期望的结果是 Failure(java.lang.StackOverflowError)。 我得到的结果只是 java.lang.StackOverflowError。我想问题是 StackOverflowError 不是异常,而是一个错误。如果是,有什么方法可以通过使用 Try 或其他一些 monad 来“捕捉”这些错误?

【问题讨论】:

    标签: java scala


    【解决方案1】:

    根据 Scala 文档。

    注意:Try 上的组合子只会捕获非致命异常 (参见 scala.util.control.NonFatal)。另一方面,严重的系统错误 手,将被抛出。

    没有Throwable -> ErrorsTry 捕获。

    我会实现一些允许处理 Errors 的包装器:

    object TryAll {
      def apply[K](f: => K): Try[K] =
        try { 
           Success(f)
        } catch {
          case e: Throwable => Failure(e)
        }
    }
    
    
    TryAll {
      Calculator.eval(..)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 2016-05-11
      • 2019-08-25
      相关资源
      最近更新 更多