Kotlin学习笔记(七)扩展函数

作者: 大虾啊啊啊 | 来源:发表于2020-10-21 08:27 被阅读0次

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....

相关文章

网友评论

    本文标题:Kotlin学习笔记(七)扩展函数

    本文链接:https://www.haomeiwen.com/subject/yfmkmktx.html