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....
网友评论