Kotlin學習筆記(七)擴展函數

1.擴展函數

擴展函數,顧名思義就是對已經存在的類添加新的函數,在新的函數體中可以調用自身的屬性,函數或者自身對象。

//爲String類添加擴展函數lastChar
//get爲String的自帶方法,legth爲自帶屬性
fun String.lastChar(): Char = get(length - 1)

//爲Int 添加doubleValue擴展函數,this爲自身
fun Int.doubleValue(): Int = this * 2

fun test() {
    var name = "weishixiong"
    println(name.lastChar())
    var value = 10
    println(value.doubleValue())

}

添加靜態的擴展函數

//爲MyExtent添加靜態的擴展函數  getValue
fun MyExtent.Companion.getValue():Int = value

fun main() {
    println(MyExtent.getValue())
}

//爲MyExtent添加靜態的擴展函數  getDouvleValue
fun MyExtent.Companion.getDouvleValue(): Int {
    return value * 2
}

class MyExtent {
    companion object {
        //靜態成員
        val value = 10
    }
}

2.擴展屬性

爲String 類添加屬性doubleLength

fun main() {
    var value = "weishixiong"
    println(value.doubleLength)
}

var String.doubleLength: Int
    get() = length * 2
    set(value) {
    }

3.不可以重寫的擴展函數

我們先看下面這段代碼

fun main() {
   var view: MyView = MyButton()
    view.click()
    view.longClick()
}

open class MyView{
    open fun click(){
        println("MyView....")
    }
}

 class MyButton:MyView(){
     override fun click(){
        println("MyButton....")
    }
}
fun MyView.longClick() =  println("MyView....")

fun MyButton.longClick() = println("MyButton....")

在上面的代碼中,我們創建了MyView和MyButton類,MyButton繼承MyView。我們通過 var view: MyView = MyButton()創建MyView類型的MyButton對象,此時此刻去調用click方法,我們都知道這個時候調用的是子類MyButton中的click方法。這個地方是根據MyButton具體創建的對象來調用。而我們分別給他們兩個類添加了longClick擴展函數,在去調用longClick函數,此時此刻調用的是MyView中的擴展函數longClick。我們看打印結果。所以調用擴展函數的時候,是根據聲明的對象類型來調用,也就是var view: MyView中聲明的是MyView類型。所以調用擴展函數的時候,調用了MyView的擴展函數。

MyButton....
MyView....

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