【问题标题】:Global try/catch implementation in scalascala 中的全局 try/catch 实现
【发布时间】:2018-04-22 17:52:34
【问题描述】:

我正在尝试为我的所有方法寻找全局 try/catch 方法来处理异常并返回相同的结果。

private def myMethod() {
     try {
       methodThatThrowsIOException() 
     } catch (IOException e) {
       //What to do?   
     }
   }

所以,与其在每个方法中分别调用 try catch ,我可以设计一个通用方法来处理我在 scala 中的所有其他方法的 try/catch 异常。 在这里我需要使 myMethod() 通用并传递任何 methodThatThrowsIOException()

【问题讨论】:

  • 请提供myMethod的返回类型。没有它,不清楚您期望返回什么。如果返回类型。

标签: scala try-catch


【解决方案1】:

当将块传递给函数时,尤其是当该函数在各处使用不同的输入时,我倾向于将其分离到自己的参数列表中:

private def myMethod[T](block: => T): Try[T] = {
    Try(block())
}

这通常更容易阅读,例如:

val result = myMethod {
  // your code
}

然后您匹配失败的结果,以便按照您的要求访问异常。如果methodThatThrowsIOException 上从来没有返回类型,那么您可以进一步简化并可能使用Option 而不是Try

【讨论】:

    【解决方案2】:

    你可以实现一个高阶函数来接收你需要的一切(某种模板模式)。像这样的

    private def myMethod[T](block: => T, errorHandling: Throwable => Any) {
         Try(block()) match {
           case Success(s) => s
           case Failure(e) => errorHandling(e)
         }
       }
    

    【讨论】:

    • 我相信你想说errorHandling: NotFatal => Any。我们不应该处理Throwable
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2011-07-06
    • 2011-04-17
    相关资源
    最近更新 更多