首页 > 其他分享 >有关kotlin的回调函数

有关kotlin的回调函数

时间:2022-09-02 13:23:48浏览次数:51  
标签:函数 kotlin setEventListener mView 回调 todo lambda

回调函数

  • 英文定义:A callback is a function that is passed as an argument to another function and is executed after its parent function has completed

  • 中文理解:回调函数被用作参数传到另一个主函数里面,当那个主函数执行完之后,再执行传进去的这个函数。这个过程就叫做回调;

  • 代码示例

    //定义主函数,回调函数作为参数
    function A(callback) {
        callback();  
        console.log('我是主函数');      
    }
    
    //定义回调函数
    function B(){
        setTimeout("console.log('我是回调函数')", 3000);//模仿耗时操作  
    }
    
    //调用主函数,将函数B传进去
    A(B);
    
    //输出结果
    我是主函数
    我是回调函数
    
  • 定义主函数的时候,我们让代码先去执行callback()回调函数,但输出结果却是后输出回调函数的内容。这就说明了主函数不用等待回调函数执行完,可以接着执行自己的代码。所以一般回调函数都用在耗时操作上面。比如ajax请求,比如处理文件等

Kotlin中的回调函数

Kotlin回调函数-对于lambda的简化
  • 在Kotlin中对Java中的一些的接口的回调做了一些优化,可以使用一个lambda函数来代替。可以简化写一些不必要的嵌套回调方法。但是需要注意:在lambda表达式,只支持单抽象方法模型,也就是说设计的接口里面只有一个抽象的方法,才符合lambda表达式的规则,多个回调方法不支持
  1. 用Java代码实现一个接口的回调

    mView.setEventListener(new ExamPlanHomeEventListener(){
        public void onSuccess(Data data){
          //todo
        }
    });
    
  2. 在Kotlin中的实现一个接口的回调,不使用lambda表达式(这种方式非常适用于kotlin中对于一个接口中含有多个回调方法)

    mView.setEventListener(object: ExamPlanHomeEventListener{
        public void onSuccess(Data data){
          //todo
        }  
    });
    
  3. 如果在Kotlin中的对于接口只有一个回调的方法,就符合使用lambda函数,我们可以把以上代码简化成这样

    mView.setEventListener({
       data: Data ->
       //todo
    })
    
    //或者可以直接省略Data,借助kotlin的智能类型推导
    mView.setEventListener({
       data ->
       //todo
    })
    
  4. 如果以上代码中的data参数没有使用到的话,可以直接把data去掉

    mView.setEventListener({
      //todo
    })
    
  5. 以上代码还可以做个调整,由于setEventListener函数最后一个参数是一个函数的话,可以直接把括号的实现提到圆括号外面

    
    mView.setEventListener(){
       //todo
    }
    
  6. 由于setEventListener这个函数只有一个参数,可以直接省略圆括号

    mView.setEventListener{
      //todo
    }
    

标签:函数,kotlin,setEventListener,mView,回调,todo,lambda
From: https://www.cnblogs.com/horseweed/p/16649481.html

相关文章

  • sparkstreaming转换算子--窗口函数
    window画图理解说明countByWindow对每个滑动窗口的数据执行count操作reduceByWindow对每个滑动窗口的数据执行reduce操作reduceByKeyAndWindow对每个滑动窗口的......
  • 对比es6class类和构造函数
    构造函数  在原来class类这个语法糖没有出来之前我们一般会把方法挂在prototype上为了防止过多的开辟内存1//构造函数-------------------------------......
  • c#线程池使用之_回调方法中传递多个参数的处理
    如题,在这里主要是做个关于线程池使用过程中回调方法需要用到多个参数的时候的场景 下面中的代码做个例子:我需要用到一个WebClientDown2来去远程地址下载一个文件保存到......
  • 函数的“进出”
    函数的“进出”首先,函数是编程中令人兴奋的垫脚石!是的,我这么说,主要是因为我一直在努力思考写作和创建函数以及你不能没有它们的事实。在这里,我们将通过这篇文章讲述JavaS......
  • # JavaScript 函数
    目录JavaScript函数函数概念函数的使用函数的使用函数的封装函数的参数形参和实参形参和实参个数不匹配问题return终止函数return只能返回一个值JavaScript函数函数概......
  • Vuex中的辅助函数
     一、组件访问state从vuex中导入mapState函数import{mapState}from'vuex'映射为当前组件的computed计算属性:...mapState(['count'])3.添加到组件......
  • 【Java基础】类的成员之二:方法(函数)
    1.方法表示类或对象具有的功能,也称为函数,定义在类中2.方法的执行过程方法被调用一次就会执行一次,方法中只能调用方法或属性,不能在方法内部定义方法。3.return关键字......
  • MySQL常用日期函数
    目录1、日期函数1.1、CURDATE()1.2、CURRENT_DATE()1.3、CURRENT_DATE1.4、将日期转为19900101格式2、时间函数2.1、CURTIME()2.2、CURRENT_TIME()2.3、CURRENT_TIME3、日......
  • Linux0.11 sleep_on wake_up函数理解和纠正
    /**将当前进程设置为不可中断的睡眠状态*只有明确进程唤醒才可以*/voidsleep_on(structtask_struct**p){structtask_struct*tmp;if(!p)......
  • static/const/vitual/inline函数互属问题
    静态成员函数并不会关联到this指针,因此差不多等同于外部函数。主要有下面三个特性1.不能直接存取其class内的非静态成员2.不能够直接声明为const3.不需要通过对象来......