概述
在Kotlin中,允许对类进行扩展,不需要继承或使用 Decorator 模式,通过一种特殊形式的声明,来实现具体实现某一具体功能。扩展函数是静态解析的,并未对原类增添函数或者属性,也就是说对其本身没有丝毫影响。
扩展函数
扩展类的函数, 即 Extension Function , 可以在已有类中添加新的方法, 比继承更加简洁和优雅.
定义形式
扩展函数定义形式:
fun receiverType.functionName(params){
body
}
- receiverType:表示函数的接收者,也就是函数扩展的对象
- functionName:扩展函数的名称
- params:扩展函数的参数,可以为NULL
扩展函数并没有对原类做修改,而是为被扩展类的对象添加新的函数。
fun MutableList<Int>.swap(index1: Int, index2: Int) {
val tmp = this[index1] // 'this' 指代 list 实例
this[index1] = this[index2]
this[index2] = tmp
}
fun main(args: Array<String>) {
val l = mutableListOf(1, 2, 3)
l.swap(0, 2) // 'swap()' 函数内的 'this' 将指向 'l' 的值
println(l.toString())
}
// Log
[3, 2, 1]
先对MutableList声明一个扩展函数swap,用来调换不同位置的值.在测试实例中,声明了一个MutableList实例,其值为1,2,3.然后调用该扩展函数swap(0, 2),在Log中,可以清晰的看出,位置0和2的值做了互换。在实际开发时,如果对一个类某一功能并不通用,只有某些特殊场景使用时,可以使用扩展函数,从而显得灵活多变。
注:
this关键字指代接收者对象(receiver object)(也就是调用扩展函数时, 在点号之前指定的对象实例).
扩展函数是静态解析的
之前说过,扩展函数是静态解析的,也就是,它并不是接收者类型的虚拟成员,意味着调用扩展函数时,调用扩