W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
前面我們給出了 Scala 的類(lèi)的一個(gè)關(guān)系圖:
在這張圖的最下方我們可以看到有兩個(gè)類(lèi),scala.Null 和 scala.Nothing。 這兩個(gè)類(lèi)的作用是 Scala 支持統(tǒng)一方式用來(lái)處理面向?qū)ο蟮囊恍┻吔乔闆r。因?yàn)樗鼈冊(cè)陬?lèi)層次圖的下方,因此也稱(chēng)為底層類(lèi)型。
類(lèi) Null 代表 null 引用,它是所有引用類(lèi)(每個(gè)由 AnyRef 派生的類(lèi))的子類(lèi)。Null 和值類(lèi)型不兼容,也就是比如說(shuō),你不能把 null 賦值給一個(gè)整數(shù)類(lèi)型變量:
scala> val i:Int=null
<console>:7: error: an expression of type Null is ineligible for implicit conversion
val i:Int=null
Nothing 類(lèi)型為圖中類(lèi)層次關(guān)系的最下方,它是所有其他類(lèi)的子類(lèi),然而這個(gè)類(lèi)型沒(méi)有任何實(shí)例(也就是沒(méi)有任何值對(duì)應(yīng) Nothing 類(lèi)型)前面提到,Nothing 類(lèi)型的一個(gè)用法是示意應(yīng)用程序非正常終止,比如 Predef 的有一個(gè) error 方法:
def error(message:String) :Nothing =
throw new RuntimeException(message)
error 的返回類(lèi)型就是 Nothing,告訴調(diào)用者該方法沒(méi)有正常退出(拋出異常)。正因?yàn)?Nothing 為所有其它類(lèi)型的子類(lèi),你可以靈活使用如 error 這樣的函數(shù)。比如:
def divide(x:Int,y:Int):Int=
if(y!=0) x/y
else error("Cannot divide by Zero")
if “then”分支的類(lèi)型為 Int(x/y),else 分支的類(lèi)型為 error 返回值,其類(lèi)型為 Nothing,因?yàn)?Nothing 為所有類(lèi)型的子類(lèi),它也是 Int 的子類(lèi),因此 divide 的類(lèi)型為 Int。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: