06-扩展原生函数
6.2.2 扩展原生函数
Kotlin的扩展函数允许开发者在不改变已有类的情况下,为类添加新的函数和属性。扩展函数定义形式如下。
fun receiverType.functionName(params){
函数体
}
该函数中,receiverType表示函数的接收者,也就是扩展函数的对象;functionName表示扩展函数的名称;params表示扩展函数的参数,可以为空。下面是为MutableList
fun main(args: Array<String>) {
val l = mutableListOf(1, 2, 3)
l.swap(0, 2)
println(l.toString()) //输出[3, 2, 1]
}
//扩展函数swap,调换不同位置的值
fun MutableList<Int>.swap(index1: Int, index2: Int) {
val tmp = this[index1] //this对应该列表
this[index1] = this[index2]
this[index2] = tmp
}
在上面的实例中,this关键字指代扩展函数内部对应的接收者对象。当然,Kotlin还允许对扩展函数进行泛化。
fun <T> MutableList<T>.swap(index1: Int, index2: Int) {
val tmp = this[index1]
this[index1] = this[index2]
this[index2] = tmp
}
在扩展函数内,我们可以通过this来判断接收者是否为null,即使接收者为null,也可以调用扩展函数。
fun main(arg:Array<String>){
var t = null
println(t.toString())
}
fun Any?.toString(): String {
if (this == null) return "null"
return toString()
}