Scala 所有類(lèi)的公共子類(lèi)–底層類(lèi)型

2018-09-28 18:19 更新

所有類(lèi)的公共子類(lèi)–底層類(lèi)型

前面我們給出了 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。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)