Scala提供了Option机制来解决,代码中不断检查null的问题。

标准类库中,Option采用样例类实现,有两个样例子类:Some和None

Some中包装了一个值,可以使用泛型。

None中则表示没有值。

Option举例:

 1 def getProperty(name: String): Option[String] = {
 2   val value = System.getProperty(name)
 3   if (value != null) Some(value) else None
 4 }
 5 
 6 val osName = getProperty("os.name")
 7 
 8 osName match {
 9   case Some(value) => println(value)
10   case _ => println("none")
11 }

这样做还是,比较繁琐的。

也可以使用getOrElse来提供当为None时的默认值。

1 def getProperty(name: String): Option[String] = {
2   val value = System.getProperty(name)
3   if (value != null) Some(value) else None
4 }
5 
6 val osName = getProperty("os.name")
7 
8 println(osName.getOrElse("none"))

若想略过None,可以使用for推导式。

1 osName.foreach(print _)

通常不用我们自己写,像Map之类的集合类,的get等方法返回的就是一个Option对象。