当前位置:嗨网首页>书籍在线阅读

06-扩展原生函数

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

6.2.2 扩展原生函数

Kotlin的扩展函数允许开发者在不改变已有类的情况下,为类添加新的函数和属性。扩展函数定义形式如下。

fun receiverType.functionName(params){
    函数体
}

该函数中,receiverType表示函数的接收者,也就是扩展函数的对象;functionName表示扩展函数的名称;params表示扩展函数的参数,可以为空。下面是为MutableList添加swap函数的实例,用于调换不同位置的值。

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()
}