Nothing
Nothing是所有類型的子類奇钞,也是Null的子類。Nothing沒有對象漂坏,但是可以用來定義類型景埃。例如,如果一個方法拋出異常顶别,則異常的返回值類型就是Nothing(雖然不會返回) 纠亚。
def get(index:Int):Int = {
if(x < 0) throw new Exception(...)
else ....
}
if語句是表達式,有返回值筋夏,必然有返回值類型蒂胞,如果x < 0,拋出異常条篷,返回值的類型為Nothing骗随,Nothing也是Int的子類,所以赴叹,if表達式的返回類型為Int鸿染,get方法的返回值類型也為Int。
Null
Null是所有AnyRef的子類乞巧,在scala的類型系統(tǒng)中涨椒,AnyRef是Any的子類,同時Any子類的還有AnyVal绽媒。對應(yīng)java值類型的所有類型都是AnyVal的子類蚕冬。所以Null可以賦值給所有的引用類型(AnyRef),不能賦值給值類型是辕,這個java的語義是相同的囤热。 null是Null的唯一對象。
None
None是一個object获三,是Option的子類型旁蔼,定義如下:
case object None extends Option[Nothing] {
def isEmpty = true
def get = throw new NoSuchElementException("None.get")
}
scala推薦在可能返回空的方法使用Option[X]作為返回類型锨苏。如果有值就返回Some[x] (Some也是Option的子類),否則返回None棺聊,例如 :
def get(key: A): Option[B] = {
if (contains(key))
Some(getValue(key))
else
None
}
獲得Option后伞租,可以使用get獲得包含的值,或者使用getOrElse獲得默認值如果isEmpty為true限佩。
Nil
Nil是一個空的List肯夏,定義為List[Nothing],根據(jù)List的定義List[+A]犀暑,所有Nil是所有List[T]的子類。
轉(zhuǎn)載請注明作者Jason Ding及其出處
GitCafe博客主頁(http://jasonding1354.gitcafe.io/)
Github博客主頁(http://jasonding1354.github.io/)
CSDN博客(http://blog.csdn.net/jasonding1354)
簡書主頁(http://www.reibang.com/users/2bd9b48f6ea8/latest_articles)
Google搜索jasonding1354進入我的博客主頁