美文网首页
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