Scala 所有類的公共子類–底層類型

2018-09-28 18:19 更新

所有類的公共子類–底層類型

前面我們給出了 Scala 的類的一個關(guān)系圖:

在這張圖的最下方我們可以看到有兩個類,scala.Null 和 scala.Nothing。 這兩個類的作用是 Scala 支持統(tǒng)一方式用來處理面向?qū)ο蟮囊恍┻吔乔闆r。因?yàn)樗鼈冊陬悓哟螆D的下方,因此也稱為底層類型。

類 Null 代表 null 引用,它是所有引用類(每個由 AnyRef 派生的類)的子類。Null 和值類型不兼容,也就是比如說,你不能把 null 賦值給一個整數(shù)類型變量:

scala> val i:Int=null
<console>:7: error: an expression of type Null is ineligible for implicit conversion
       val i:Int=null

Nothing 類型為圖中類層次關(guān)系的最下方,它是所有其他類的子類,然而這個類型沒有任何實(shí)例(也就是沒有任何值對應(yīng) Nothing 類型)前面提到,Nothing 類型的一個用法是示意應(yīng)用程序非正常終止,比如 Predef 的有一個 error 方法:

def error(message:String) :Nothing =
  throw new RuntimeException(message)

error 的返回類型就是 Nothing,告訴調(diào)用者該方法沒有正常退出(拋出異常)。正因?yàn)?Nothing 為所有其它類型的子類,你可以靈活使用如 error 這樣的函數(shù)。比如:

def divide(x:Int,y:Int):Int=
  if(y!=0) x/y
  else error("Cannot divide by Zero")

if “then”分支的類型為 Int(x/y),else 分支的類型為 error 返回值,其類型為 Nothing,因?yàn)?Nothing 為所有類型的子類,它也是 Int 的子類,因此 divide 的類型為 Int。

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號