Kotlin---類型判斷與強轉

準備工作

準備兩個類PersonChild Person類如下:

 open class Person(name: String, age: Int) {
    var mName    = name
    var mAge = age

    open fun printInfo(): Int = Log.e("TAG", "$mName.....$mAge")
}

Child類如下:

class Child(name: String, age: Int, canWalk: Boolean) : Person(name, age) {
    var mCanWalk = canWalk

    override fun printInfo(): Int = Log.e("Child", "Child...$mName...$mAge...$mCanWalk")

    fun printCanWalk() = Log.e("TAG", "Child Can Walk....$mCanWalk")
}

類型判斷

在java中使用instanceof來判斷類型。而在Kotlin中,則是使用is來判斷:

var person = Person("Bob", 30)
if (person is Child) {
     person.printCanWalk()
} else {
     person.printInfo()
}

可以看到在判斷完類型後,可以直接調用該類型的函數。這部分是編譯器替我們完成的,並且在條件表達式中同樣可以使用

if (person is Child && person.mCanWalk) {
    person.printCanWalk()
}

類型強轉

當有確定類型當時候,就可以使用as進行強制轉換了:

var person = Person("Bob", 30)
var child = person as Child

但是如果在強轉當時候,發現類型不匹配,則會報Exception。而如果是null類型的對象強轉時,可以通過?來允許可空數據進行判斷

var person : Any = Person("Bob", 30)
var child: Child? = person as? Child
child?.printCanWalk()

這樣的話,當類型判斷爲空時,則會返回null,而在執行child?.printCanWalk()語句時,會判斷child是否爲空,如果爲空的話,則不會執行,如果不爲空的話,就會執行。

而將person標爲Any,可以相當於Java中的Object,爲了去除編譯器的警告。

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