最后相当于Scala Try

Cor*_*ein 10 scala

def doWork() = {
  getLock()
  Try(useResource) match {
    case Success(result) => releaseLock(); result
    case Failure(e: Exception) => releaseLock(); throw e
  }
}
Run Code Online (Sandbox Code Playgroud)

当我退出时,我正在努力确保锁定被释放doWork.但是作为该方法的一部分,我可能会抛出一个异常,所以我不能在最后释放锁doWork.

releaseLock()重复两次,看起来有点代码味道.我可以通过使用传统的Java风格的try/catch/finally来减少它:

def doWork() = {
  getLock()
  try {
    useResource
  } catch {
    case e: Exception => throw e
  } finally {
    releaseLock()
  }
}
Run Code Online (Sandbox Code Playgroud)

Try如果可能的话,我更喜欢使用Scala .

有没有办法在框架内执行"最终"逻辑Try

Sea*_*ean 13

只是Try暂时松鼠离开:

def doWork = {
  getLock()
  val t = Try(useResource)
  releaseLock()
  t.get
}
Run Code Online (Sandbox Code Playgroud)