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