Kotlin let with run also apply区分

image.png

apply

它与其它特殊之处在于,它返回本省对象:

1
public inline fun <T> T.apply(block: T.() -> Unit): T {}

例如:

1
2
3
4
5
6
ArrayList<String>().apply {
add("qq")
add("mi")
}.let {//this->ArrayList本身
Log.i("xx","list==="+it)
}

打印结果:

1
list===[qq, mi]

这里T 就是 ArrayList<String>() 返回对象本身,也就是ArrayList

  • 内部是 this 还是 it 这个倒没什么,编辑器一般都会有提示,如图:

    1540798437731.png

applythis , alsoit

run

  • run:

    1
    public inline fun <T, R> T.run(block: T.() -> R): R {}

    返回最后一行,传入block 返回 最后一行,例如:

    1
    2
    3
    4
    5
    6
    7
    ArrayList<String>().run {
    add("lala")
    add("kaka")
    this.get(1)
    }.let {
    Log.i("xx","返回::"+it)
    }

    打印:

    1
    返回::kaka

let

1
public inline fun <T, R> T.let(block: (T) -> R): R {}

也是返回最后一行,但是它内部不能调用对象的方法:

1
2
3
4
5
6
fun letGo(): Int{
"qianqian".let {
Log.i("xx",it)
return 1
}
}

调用letGO 返回 1

with

类似于:apply + let 的结合

1
public inline fun <T, R> with(receiver: T, block: T.() -> R): R {}

例如:

1
2
3
4
5
6
7
with(ArrayList<String>()){
add("haha")
add("heihei")
this//最后返回ArrayList对象
}.let {
Log.i("xx","list==="+it)//打印:[haha,heihei]
}
-------------本文结束感谢您的阅读-------------