option的出现是为了解决null存在各类歧义的状况。最多见的一种状况是假设咱们对一个map去值,咱们调用Map.get(“key”)方法,在java中若是咱们获得结果为null,可能表明这个”key”存在,可是对应的value为空,也可能表明这个”key”不存在于map中。所以在scala中有了option这个类来解决返回null的问题。
在Java 里,null 是一个关键字,不是一个对象,因此对它调用任何方法都是非法的。可是这对语言设计者来讲是一件使人疑惑的选择。为何要在程序员但愿返回一个对象的时候返 回一个关键字呢?为了让全部东西都是对象的目标更加一致,也为了遵循函数式编程的习惯,Scala 鼓励你在变量和函数返回值可能不会引用任何值的时候使用Option 类型。在没有值的时候,使用None。若是有值能够引用,就使用Some 来包含这个值。none和some是option的子类。java
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: A b: B e: null f: F