上一篇讲了apply,链接在下面,有兴趣的同学可以去看看
https://developer.aliyun.com/article/998697?spm=a2c6h.24874632.expert-profile.11.30ed6e4fz9Gos1
这一篇讲解最后一个内联函数also,话不多说,开始。
also函数
一、函数结构为
public inline fun T.also(block: (T) -> Unit): T { block(this); return this }
从结构上可以看出,also与apply一样,与let、with、run不同,它没有R类型,它是对原始数据T操作处理后再将T返回。
二、一般使用结构:
object.also{
//todo
}
与let 类似
三、also函数底层的inline扩展函数+lambda结构
@kotlin.internal.InlineOnly
@SinceKotlin("1.1")
public inline fun <T> T.also(block: (T) -> Unit): T { block(this); return this }
四、函数结构分析
also函数的结构实际上和let很像唯一的区别就是返回值的不一样,let是以闭包的形式返回,返回函数体内最后一行的值,如果最后一行为空就返回一个Unit类型的默认值。而also函数返回的则是传入对象的本身
五、举个栗子
//kotlin
fun main(args: Array<String>) {
val result = "testLet".also {
println(it.length)
1000
}
println(result)
}
代码分析:如果是let,result将等于1000,而also的话,result=“testLet”
六、kotlin 与 java的代码对比
//kotlin
fun main(args: Array<String>) {
val result = "testLet".also {
println(it.length)
1000
}
println(result)
}
//java
public final class AlsoFunctionKt {
public static final void main(@NotNull String[] args) {
Intrinsics.checkParameterIsNotNull(args, "args");
String var2 = "testLet";
int var4 = var2.length();
System.out.println(var4);
System.out.println(var2);
}
}
七、使用场景
适用于let函数的任何场景,also函数和let很像,只是唯一的不同点就是let函数最后的返回值是最后一行的返回值而also函数的返回值是返回当前的这个对象。一般可用于多个扩展函数链式调用。
至此5个内联函数都讲解完了,下一篇文章弄个表格做个总结。that's all