Похоже, что этот код является частью более крупного блока, который должен оцениваться как 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")
}
есть, вероятно, некоторые недостающее контекст здесь - выглядит, как этот код является органом функции/блока, которая возвращает 'String', а в случае исключения - нет - можете ли вы добавить код, инкапсулирующий этот фрагмент? –
Возможно, вы можете попробовать сделать что-то вроде этого catch {case e: IOException => e.getMessage}. В основном функция ur ожидает String, но вы ничего не возвращаете – Rakshith