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