我正在尝试为我的所有方法寻找Global try / catch方法来处理异常并返回相同的异常。
private def myMethod() {
try {
methodThatThrowsIOException()
} catch (IOException e) {
//What to do?
}
}
所以,而不是在每个方法中单独调用try catch,我可以设计一个公共方法来处理scala中我所有其他方法的try / catch异常。在这里我需要使myMethod()
通用并传递任何methodThatThrowsIOException()
。
当将块传递给函数时,特别是当该函数随后在具有不同输入的地方使用时,我倾向于将它分成它自己的参数列表:
private def myMethod[T](block: => T): Try[T] = {
Try(block())
}
这通常更容易阅读,例如:
val result = myMethod {
// your code
}
然后,您将匹配失败的结果,以便按照您的要求访问异常。如果在methodThatThrowsIOException
上永远不会有返回类型,那么你可以进一步简化并使用Option
而不是Try
。
你可以实现一个更高阶的函数来接收你需要的所有东西(一种模板模式)。像这样的东西
private def myMethod[T](block: => T, errorHandling: Throwable => Any) {
Try(block()) match {
case Success(s) => s
case Failure(e) => errorHandling(e)
}
}