Kotlin中with、let、run、apply、also的使用区别汇总

偷个懒,仅找了几个表格对照比对,方便以后查看使用

区别

函数名 函数块内使用对象 返回值 是否扩展函数 适用场景
with this 函数块最后一行或return表达式的值 适用于调用同一个类多个方法
let it 函数块最后一行或return表达式的值 适用于对象统一处理不为空的情况
run this 函数块最后一行或return表达式的值 适用with()、let()函数的任何场景
apply this 该对象 适用于run()函数的任何场景,通产可用来在初始化一个对象实例时,操作对象属性并最终返回该对象。也可用于多个扩展函数链式调用
also it 该对象 适用于let()函数的任何场景,一般可用于多个扩展函数链式调用

Kotlin中with、let、run、apply、also的使用区别汇总_第1张图片

函数名 定义inline的结构 函数体内使用的对象 返回值 是否是扩展函数 适用的场景
let fun T.let(block: (T) – R): R = block(this) it指代当前对象 闭包形式返回 适用于处理不为null的操作场景
with fun with(receiver: T, block: T.() – R): R = receiver.block() this指代当前对象或者省略 闭包形式返回 适用于调用同一个类的多个方法时,可以省去类名重复,直接调用类的方法即可,经常用于Android中RecyclerView中onBinderViewHolder中,数据model的属性映射到UI上
run fun T.run(block: T.() – R): R = block() this指代当前对象或者省略 闭包形式返回 适用于let,with函数任何场景。
apply fun T.apply(block: T.() – Unit): T { block(); return this } this指代当前对象或者省略 返回this 1、适用于run函数的任何场景,一般用于初始化一个对象实例的时候,操作对象属性,并最终返回这个对象。 2、动态inflate出一个XML的View的时候需要给View绑定数据也会用到. 3、一般可用于多个扩展函数链式调用 4、数据model多层级包裹判空处理的问题
also fun T.also(block: (T) – Unit): T { block(this); return this } it指代当前对象 返回this 适用于let函数的任何场景,一般可用于多个扩展函数链式调用

你可能感兴趣的:(android,kotlin,c语言,jni,ndk)