类型单元的Scala表达式不确认键入String

时间:2016-08-03 07:56:35

标签: scala error-handling try-catch

try{
    throwsException();
} catch {
    case e: IOException => println("IO Exception");
} finally {
    println("this code is always executed");
}

catch 部分,它总是弹出“类型单元的表达式不确认键入字符串”错误。

1 个答案:

答案 0 :(得分:4)

看起来这段代码是一个更大的块的一部分,它应该被评估为String。例如,我们可以考虑以下,

def getStringResult(): String = {
  try{
    throwsException();
  } catch {
    case e: IOException => println("IO Exception");
  } finally {
   println("this code is always executed");
  }
}

现在,您可以看到,如果出现异常,则提供{ case e: IOException => println("IO Exception") },这是类型IOException => Unit的部分功能。这导致类型不匹配。

您可以像以下一样解决此问题,

def getStringResult(): String = {
  try{
    throwsException();
  } catch {
    case e: IOException => "IOException String"
  }
}

或者你可以做一个更像Scala的方法,

def getStringResult(): String = {
  val resultTry = Try(throwsException())
  // resultTry will be of type Try[String]

  resultTry.getOrElse("String in case of exception")
}