扩展函数
定义一个扩展函数,我们需要在函数名前加一个接收类型的前缀。比如,被扩张的类型,如下所示:
fun MutableList<Int>.swap(index1: Int, index2: Int) {
val tmp = this[index1] // 'this' corresponds to the list
this[index1] = this[index2]
this[index2] = tmp
}
上述代码定义了一个swap函数,这个函数属于MutableList<Int>。
this关键字等价于接收类型,即点之前的调用类型,现在可以在任意的MutableList<Int>中调用swap函数。
val l = mutableListOf(1, 2, 3)
l.swap(0, 2)
为了增强这个函数的使用范围,我们采用泛型来增强这个函数的功能。
fun <T> MutableList<T>.swap(index1: Int, index2: Int) {
val tmp = this[index1]
this[index1] = this[index2]
this[index2] = tmp
}