kotlin中is,!is,as,as?運算符

1.is運算符和 !is 運算符

kotlin中API提供的 is 運算符類似於Java中的 instanceof 關鍵字的用法。is 運算符可以檢查對象是否與特定的類型兼容(兼容:此對象是該類型,或者派生類),同時也用來檢查對象(變量)是否屬於某數據類型(如Int、String、Boolean等)。 !is運算符是它的否定形式。

val mAccount = "秦川小將"
println(mAccount is String)

輸出:

true

val mAccount = "秦川小將"
println(mAccount !is String)

輸出:

false

2.as運算符和as?運算符

as運算符用於執行引用類型的顯式類型轉換。如果要轉換的類型與指定的類型兼容,轉換就會成功進行;如果類型不兼容,使用as?運算符就會返回值null。在Kotlin中,父類是禁止轉換爲子類型的。

open class Fruit
open class Apple(name: String) : Fruit()
//
val mFruit = Fruit()
val mApple = Apple("蘋果")
//
println(mFruit as Apple)

上面這種用法會報:java.lang.ClassCastException異常

open class Fruit
open class Apple(name: String) : Fruit()
//
val mFruit = Fruit()
val mApple = Apple("蘋果")
//
println(mFruit as? Apple)

輸出:

null

open class Fruit
open class Apple(name: String) : Fruit()
//
val mFruit = Fruit()
val mApple = Apple("蘋果")
//
println(mApple as Fruit)

輸出:

Apple@1d81eb93

父類轉換爲子類是對OOP的嚴重違反,不推薦使用,父類是不能轉換爲子類的,子類包含了父類所有的方法和屬性,而父類則未必具有和子類同樣成員範圍,所以這種轉換是不被允許的,即便是兩個具有父子關係的空類型,也是如此。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章