option的出现是为了解决null存在各种歧义的情况。最常见的一种情况是假设我们对一个map去值,我们调用Map.get(“key”)方法,在java中如果我们得到结果为null,可能代表这个”key”存在,但是对应的value为空,也可能代表这个”key”不存在于map中。因此在scala中有了option这个类来解决返回null的问题。
在Java 里,null 是一个关键字,不是一个对象,所以对它调用任何方法都是非法的。但是这对语言设计者来说是一件令人疑惑的选择。为什么要在程序员希望返回一个对象的时候返 回一个关键字呢?为了让所有东西都是对象的目标更加一致,也为了遵循函数式编程的习惯,Scala 鼓励你在变量和函数返回值可能不会引用任何值的时候使用Option 类型。在没有值的时候,使用None。如果有值可以引用,就使用Some 来包含这个值。none和some是option的子类。val temp = Map( "a" -> "A", "b" -> "B", "c"->"C", "d"->"D","e"->null)println( "a: " + temp.get("a").get )println( "b: " + temp.get("b").get )println( "e: " + temp.get("e").get)//会报Exception in thread "main" java.util.NoSuchElementException: None.get错//println( "f: " + temp.get("f").get)println( "f: " + temp.get("f").getOrElse("F"))
输出如下:
a: Ab: Be: nullf: F