上一篇讲了apply,链接在下面,有兴趣的同学可以去看看
kotlin 之几个常见的内联函数(四)_水很清的博客-CSDN博客
这一篇讲解最后一个内联函数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.also(block: (T) -> Unit): T { block(this); return this }
四、函数结构分析
also函数的结构实际上和let很像唯一的区别就是返回值的不一样,let是以闭包的形式返回,返回函数体内最后一行的值,如果最后一行为空就返回一个Unit类型的默认值。而also函数返回的则是传入对象的本身
五、举个栗子
- //kotlin
- fun main(args: Array
) { - val result = "testLet".also {
- println(it.length)
- 1000
- }
- println(result)
- }
代码分析:如果是let,result将等于1000,而also的话,result=“testLet”
六、kotlin 与 java的代码对比
- //kotlin
- fun main(args: Array
) { - 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