选项
除非与期望 null
的遗留 Java 代码交互,否则强烈建议不要使用 null
值。相反, Option
时,应使用一个函数的结果可能要么是东西(Some
)或没有(None
)。
try-catch 块更适合于错误处理,但如果函数可以合法地返回任何内容,则 Option
适合使用,并且很简单。
Option[T]
可以是 Some(value)
(包含 T
类型的值)或 None
:
def findPerson(name: String): Option[Person]
如果没有人找到,可以退回 None
。否则,返回包含 Person
对象的 Some
类型的对象。以下是处理 Option
类型对象的方法。
模式匹配
`findPerson(personName)` match {
case `Some(person)` => `println(person.surname)`
case None => println(s"No person found with name $personName")
}
使用 map 和 getOrElse
val name = `findPerson(personName)`.map(_.firstName).getOrElse("Unknown")
`println(name)` // Prints either the name of the found person or "Unknown"
使用折叠
val name = `findPerson(personName)`.fold("Unknown")(_.firstName)
// equivalent to the map getOrElse example above.
转换为 Java
如果需要将 Option
类型转换为可归零的 Java 类型以实现互操作性:
val s: Option[String] = Option("hello")
s.orNull // "hello": String
s.getOrElse(null) // "hello": String
val n: Option[Int] = Option(42)
n.orNull // compilation failure (Cannot prove that Null <:< Int.)
n.getOrElse(null) // 42