我写了以下一段代码
def info(): MyCaseClass = {
Try {
val fileSys = new File("somePath")
MyCaseClass(fileSys.getTotalSpace, fileSys.getUsableSpace)
} match {
case Failure(f) => {
logger.error(s"Could not read information:${f.getStackTrace}")
MyCaseClass(0, 0)
}
case Success(s) => s
}
}
是否有更短的方法来处理文件系统操作可能导致异常的事实,所以我按上述方法处理它。我可以不仅仅是以某种方式处理失败案例。就像Future的例外情况一样,未来只会做它所拥有的,但仅对于例外我们定义recover
和recoverWith
。这里有类似的东西吗?
答案 0 :(得分:3)
只需使用try
代替Try
:
def info(): MyCaseClass = {
try {
val fileSys = new File("somePath")
MyCaseClass(fileSys.getTotalSpace, fileSys.getUsableSpace)
} catch {
case f: Throwable => {
logger.error(s"Could not read information:${f.getStackTrace}")
MyCaseClass(0, 0)
}
}
}
答案 1 :(得分:2)
Try
也有recover
:
def info(): MyCaseClass = {
(Try {
val fileSys = new File("somePath")
MyCaseClass(fileSys.getTotalSpace, fileSys.getUsableSpace)
} recover {
case f =>
logger.error(s"Could not read information:${f.getStackTrace}")
MyCaseClass(0, 0)
}).get
}
答案 2 :(得分:0)
\.js$
似乎正是您所寻找的:
.getOrElse