美文网首页kotlin
67.apply函数

67.apply函数

作者: 写代码的向日葵 | 来源:发表于2019-10-06 02:31 被阅读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函数返回值就是调用者本身

    相关文章

      网友评论

        本文标题:67.apply函数

        本文链接:https://www.haomeiwen.com/subject/ooaypctx.html