尝试使用null/Option

the*_*ega 12 scala

我正在搜索scala中的一个Option可能性来调用一个函数并获得一个结果,如果在调用方法时引发Exception或者返回null,则得到"无".否则,Option应该具有结果的值.

我知道Try可以用于第一部分,但我不知道如何处理第二部分:

val result = Try(myFunction).toOption()
Run Code Online (Sandbox Code Playgroud)

如果该方法现在返回空值(因为它不是一个阶的功能,但Java函数),resultSome(null)不是None.

sen*_*nia 21

据我所知,scala标准库中只有一种方法可以转换nullNone- Option.apply(x),所以你必须手动使用它:

val result = Try(myFunction).toOption.flatMap{Option(_)}
// or
val result = Try(Option(myFunction)).toOption.flatten
Run Code Online (Sandbox Code Playgroud)

您可以像这样创建自己的帮助方法:

implicit class NotNullOption[T](val t: Try[T]) extends AnyVal {
  def toNotNullOption = t.toOption.flatMap{Option(_)}
}

scala> Try(null: String).toNotNullOption
res0: Option[String] = None

scala> Try("a").toNotNullOption
res1: Option[String] = Some(a)
Run Code Online (Sandbox Code Playgroud)