Kotlin 使用Lambda来设置回调的操作

作者:Heiko-Android 时间:2021-07-22 03:08:04 

使用Kotlin的Lambda表达式,我们可以抛弃回调接口的使用。只需设置希望后面会被调用的函数即可。

示例如下

新建一个Kotlin类


class MyBean {

fun testcallback1(callback: (String) -> Unit) {
   callback.invoke("这是回调的内容")
 }

fun testcallback2(value1: Int, value2: Int, callback: (Int, Int) -> Int): Int {
   var result = callback.invoke(value1, value2)
   return result * 3
 }
}

进行调用


class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)

var bean = MyBean()
   bean.testcallback1 { m -> toast(m) }

val result = bean.testcallback2(1, 2, { value1, value2 -> value1 + value2 })
   toast("计算结果" + result.toString())
 }
}

最后显示的结果

testcallback1的toast显示为: "这是回调的内容"
testcallback2将value1和value2相加,最后再乘以3,故toast显示为9

补充知识:kotlin 定义接口并实现回调

开发环境 android studio 3.0.1 已支持 kotlin

1、定义接口


interface CallBack{
 fun callBack(info : String)
}

2、实现接口 : 为继承\实现


class CallBacks : CallBack{
 override fun callBack(info : String){
   Log.d("MainApp","current info $info")
 }
}

或者


private var mCallBack = object : CallBack{
 override fun callBack(info : String){
   Log.d("MainApp","current info $info")
 }
}

3、定义带回调方法的函数


private fun initData(callBack : CallBack):Boolean{
 callBack?.callBack("我来自回调")
 return true
}

4、实现回调,调用方式与实现接口对应

initData(CallBacks())

或者

initData(mCallBack)

打印结果:

Kotlin 使用Lambda来设置回调的操作

来源:https://blog.csdn.net/EthanCo/article/details/54971645

标签:Kotlin,Lambda,回调
0
投稿

猜你喜欢

  • android跑马灯出现重复跳动以及不滚动问题的解决方法

    2023-07-24 00:33:48
  • winform用datagridview制作课程表实例

    2023-11-24 06:08:28
  • 关于java关键字this和super的区别和理解

    2022-08-01 14:33:09
  • Android自定义attr的各种坑

    2023-07-12 06:11:50
  • 详解升级Android Studio3.0时遇到的几个问题

    2021-11-19 08:13:52
  • mybatisplus逻辑删除基本实现和坑点解决

    2021-05-24 11:35:50
  • DirectInfo.GetFiles返回数组的默认排序示例

    2022-11-15 14:45:02
  • Java创建多线程的两种方式对比

    2023-09-14 21:02:49
  • mybatis 字段名自动转小写的实现

    2021-09-09 20:04:26
  • Spring Boot实现异步请求(Servlet 3.0)

    2023-11-27 06:26:47
  • JVM内存管理之JAVA语言的内存管理详解

    2021-11-01 12:00:10
  • 基于SSM实现学生管理系统

    2023-11-24 18:17:39
  • 在Eclipse安装Spring boot插件的步骤(图文)

    2023-01-14 05:04:05
  • Activiti流程图查看实例

    2022-09-10 17:51:44
  • Spring Boot 2.5.0 重新设计的spring.sql.init 配置有啥用

    2021-12-04 00:04:43
  • Java 如何实现时间控制

    2023-02-20 06:19:23
  • java向多线程中传递参数的三种方法详细介绍

    2023-07-11 21:52:55
  • Java注解Annotation原理及自定义注解代码实例

    2023-04-30 10:18:09
  • C#利用正则判断输入是否为纯数字、容器类

    2022-10-10 03:00:39
  • springmvc如何使用map接收参数

    2023-11-28 04:49:17
  • asp之家 软件编程 m.aspxhome.com