Kotlin 内联函数 apply、let、run、with、a
2018-12-24 本文已影响20人
BKQ_SYC
Apply
- 用this代表当前引用对象;
- 调用其方法时,this可省略;
- 一定有返回值,且返回值为当前对象
- 对象可判空
val data = DataCenter()
/**
* 特性
1. 用this代表当前引用对象;
2. 调用其方法时,this可省略;
3. 一定有返回值,且返回值为当前对象;
4. 对象可判空;
*/
data?.apply {
this.setUid("1111")
setUid("1111")
}.setUid("1111")
Let
- 用it代表当前引用对象;
- 调用其方法时,it不可省略;
- 函数最后一行为返回值,可有可无;
- 对象可判空;
val data = DataCenter()
/**
特性
1. 用it代表当前引用对象;
2. 调用其方法时,it不可省略;
3. 函数最后一行为返回值,可有可无;
4. 对象可判空;
*/
val value = data?.let {
it.setUid("1111")
// 不写则无返回结果
"返回结果"
}
Run
- 用this代表当前引用对象;
- 调用其方法时,this可省略;
- 函数最后一行为返回值,可有可无;
- 对象可判空;
val data = DataCenter()
/**
特性
1. 用it代表当前引用对象;
2. 调用其方法时,it不可省略;
3. 函数最后一行为返回值,可有可无;
4. 对象可判空;
*/
val value = data?.run {
this.setUid("1111")
setUid("1111")
// 不写则无返回结果
"返回结果"
}
With
- 用this代表当前引用对象;
- 调用其方法时,this可省略;
- 函数最后一行为返回值,可有可无;
- 对象不可判空;
val data = DataCenter()
/**
特性
1. 用it代表当前引用对象;
2. 调用其方法时,it不可省略;
3. 函数最后一行为返回值,可有可无;
4. 对象不可判空;
*/
val value = with(data) {
this.setUid("1111")
setUid("1111")
// 不写则无返回结果
"返回结果"
}
Also
- 用it代表当前引用对象;
- 调用其方法时,it不可省略;
- 一定有返回值,且返回值为当前对象;
- 对象可判空;
val data = DataCenter()
/**
特性
1. 用it代表当前引用对象;
2. 调用其方法时,it不可省略;
3. 一定有返回值,且返回值为当前对象;
4. 对象可判空;
*/
data?.also {
it.setUid("1111")
}.setUid("1111")
总结
apply | let | run | with | also | |
---|---|---|---|---|---|
函数体对象 | this | it | this | this | it |
对象是否可省 | 可 | 不可 | 可 | 可 | 不可 |
返回值 | 当前对象 | 任何对象 | 任何对象 | 任何对象 | 当前对象 |
可否判空 | 可以 | 可以 | 可以 | 不可以 | 可以 |