kotlin

67.apply函数

2019-10-06  本文已影响0人  写代码的向日葵

1.apply函数

fun main(args: Array<String>) {
    val list: ArrayList<String>? = arrayListOf<String>("美女", "范冰冰", "柳岩")

    //第一个apply
    list?.apply {
        add("刘诗诗")
        add("张三")
        add("李四")
    }

    Person().set {
        name = "李四"
    }
}

fun <T> T.set(block: T.() -> Unit): T {
    block.invoke(this)//this就表示调用该方法的 T 的对象实例
    return this
}

class Person {
    var name = "张三"
}

image.png
  • 可以看到apply函数是任何对象上扩展函数,不一样的是,block的类型是T.(),说明block所对应的函数是带接收者的函数字面值的,加上T.()说明是定义在对象里面的函数(扩展函数),函数里面可以访问T的字段或者方法。比如上面的listadd函数,所以可以直接在 apply内部进行add操作
  • 比如上面我们仿照apply函数写的set函数,然后也可以和apply函数一样使用

2.总结:

  • 任意类型都有apply函数扩展
  • apply参数是一个函数 T.() -> unit带接收者的函数字面值
  • lambda表达式this代表调用的对象
  • 在lambda表达式里可以访问对象的方法
  • apply函数返回值就是调用者本身
上一篇 下一篇

猜你喜欢

热点阅读