Kotlin 使用Lambda来设置回调的操作
作者:Heiko-Android 发布时间:2021-07-22 03:08:04
标签:Kotlin,Lambda,回调
使用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)
打印结果:
来源:https://blog.csdn.net/EthanCo/article/details/54971645


猜你喜欢
- Home键(小房子键)在键盘上映射的就是home键,这倒是很好记。Menu键用于打开菜单的按键,在键盘上映射的是F2键,PgUp键同样可以。
- 最近做项目有这样的需求: 在activity中启动一个dialog时, 启动的dialog的背景设为启动acitivity的模糊化图片.实现
- 前言Android提供了很多种保存应用程序数据的方法。其中一种就是用SharedPreferences对象来保存我们私有的键值(key-va
- spring boot 请求后缀匹配spring boot 项目中添加这个类可以实现url不同后缀区分了public class UrlMa
- 一、引言之前小编讲了MP从入门到核心功能的使用,接下来这几天小编会把MP在实际项目中,一些常用的高级功能给记录一下。高级功能分为:逻辑删除、
- 前面,学了物体的移动功能,现在来学一下C#实现鼠标控制摄像机(视角)移动。代码如下:C#脚本(在Unity 5.5.1 下能运行):usin
- 导语关于<resultMap>标签映射,<association>&<collection>的使用什么时候用<resultMap>标签映射1
- Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecim
- 在我们做项目的过程中,有可能会遇到跨域请求,所以需要我们自己组装支持跨域请求的JSONP数据,而在4.1版本以后的SpringMVC中,为我
- 对一个集合中的对象进行排序,根据对象的某个指标的大小进行升序或降序排序。代码如下:进行降序排列 进行降序排列 Co
- MyBatis-Plus不使用数据库默认值的问题有时候我们在设计数据表时希望某些字段使用默认值,比如create_time、和update_
- 注意我这里用的是官方最稳定的版本3.7.1,版本之间有个别命令是有差距的!1.zkCli.sh客户端zkCli.sh可以理解成客户端,也可以
- JSON.toJSONString()空字段不忽略修改使用JSON.toJSONString(object)方法,返回的json中,默认会将
- 单元测试是编写测试代码,应该准确、快速地保证程序基本模块的正确性。JUnit是Java单元测试框架,已经在Eclipse中默认安装。JUni
- 这周在做公司的一个C#项目中,要写一个webservice提供一个下载方法,之前公司有过,但是要整改,于是这种鸟屎摊子又交给了我,其中一个密
- 文章转自微信公众号:CPP开发前沿当进程结束使用共享内存区时,要通过函数 shmdt 断开与共享内存区的连接。该函数声明在 sys/shm.
- 本文实例讲述了C#实现将程序运行信息写入日志的方法。分享给大家供大家参考。具体如下:1.LogManager类class LogManage
- Maven修改打包文件名称对Maven打出的jar包名称不满意:想通过修改配置给jar包改名,查询找到了方法:pom.xml的<bui
- Android package属性、package name和Application ID三者的联系及区别package属性:在Androi
- 不同的加锁顺序我们来看一个不同加锁顺序的例子:public class DiffLockOrder {private int amount;