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