美文网首页
Kotlin - 什么是lambda表达式

Kotlin - 什么是lambda表达式

作者: 杨0612 | 来源:发表于2022-04-20 12:07 被阅读0次
什么是lambda表达式
以下是使用lambda表达式的例子
class Test(val name: String) {
    private fun test1(t: ((p: String) -> Boolean)) {//1
        val isSuccess = t.invoke("yang")
    }
    
    private fun test2() {
        test1 {//2
            println(it)
            true
        }
    }
}
  • 注释1:test1函数接收参数类型为((p: String) -> Boolean),这是函数类型;
  • 注释2:调用test1函数,传入lambda表达式作为参数,其实lambda表达式也是高阶函数,只不过是匿名的;
反编译看看
public final class Test {
    ......
    private final void test1(Function1 t) {//1
        boolean isSuccess = (Boolean)t.invoke("yang");
    }

    private final void test2() {//2
        this.test1(new Function1() {
            @Override
            public Object invoke(Object o) {
                System.out.println(o);
                return true;
            }
        });
    }
     ......
}


public interface Function1<in P1, out R> : Function<R> {3
    /** Invokes the function with the specified argument. */
    public operator fun invoke(p1: P1): R
}
  • 注释1:对应定义的test1函数,入参为Function1类型,Function1是接口,其invoke函数接收类型为P1的参数,返回值类型为R,其实Function1就是用来描述函数类型的((p: String) -> Boolean),Kotlin编译器会lambda转来成Function1;
  • 注释2:调用test1函数,传入匿名内部类对象作为参数,内部类实现了Function1接口,是否感觉跟回调很类似;
  • 注释3:前面介绍过了Function1是接口,其invoke函数接收类型为P1的参数,返回值类型为R,Kotlin提供了从Function0到Function22,分别接收0到22个参数;
总结
  • lambda表达式是匿名高阶函数,可以被当成参数来使用;
  • Kotlin编译器会lambda转来成Function1,延伸出来,高阶函数的原理也是一样;

以上分析有不对的地方,请指出,互相学习,谢谢哦!

相关文章

网友评论

      本文标题:Kotlin - 什么是lambda表达式

      本文链接:https://www.haomeiwen.com/subject/zfhtertx.html