1. 程式人生 > >Scala 統一型別

Scala 統一型別

Scala中,所有的值包括數字值與函式都具有型別。下圖為型別層級的一個子集。
Scala型別層次中一個子集

Scala型別層級


Any是所有型別的超型別,被稱為頂級型別。它定義了一些通用方法,例如equals、hashCode與toString。Any有兩個直接子類:AnyVal與AnyRef。

AnyVal表示值型別。存在九種預定義的值型別並且它們都是非可用型別:Double、Float、Long、Int、Short、Byte、Char、Unit與Boolean。Unit是不攜帶有意義資訊地值型別。可以使用()字面宣告Unit例項,並且Unit只存在一個例項。所有的函式都必須有返回,所以Unit有時用於返回型別。

AnyRef表示引用型別。所有的非值型別都被定義為引用型別。Scala中每個使用者定義型別都是AnyRef的子型別。如果Scala用於Java執行環境的上下文中,AnyRef對應java.lang.Object。

型別轉化


型別轉化依照以下方式:
型別轉化

型別轉化是單向的,逆方向將產生編譯錯誤。
可以將引用型別轉化為其子型別。

Nothing與Null


Nothing是所有型別的子型別,被稱為底層型別。沒有值的型別為Nothing。它通常用於發出非正常終止訊號,例如丟擲一個異常,程式退出,或無限迴圈(即,它是不能計算出值的表示式的型別,或不能正常返回的方法的型別)

Null是所有引用型別(即,AngRef的任意子型別)的子型別。它有一個被關鍵字null標識的單例值。Null主要用於與其他JVM語言進行互動,Scala程式碼中幾乎不使用。

翻譯源:Scala Tour