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的字段或者方法。比如上面的list
有add
函数,所以可以直接在 apply
内部进行add
操作
- 比如上面我们仿照
apply
函数写的set
函数,然后也可以和apply
函数一样使用
2.总结:
- 任意类型都有apply函数扩展
- apply参数是一个函数
T.() -> unit
带接收者的函数字面值
- lambda表达式this代表调用的对象
- 在lambda表达式里可以访问对象的方法
- apply函数返回值就是调用者本身
网友评论