Kotlin 使用Lambda来设置回调的操作
2020-03-17 12:03
706 查看
使用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来设置回调的操作就是小编分享给大家的全部内容了,希望能给大家一个参考
您可能感兴趣的文章:
相关文章推荐
- Kotlin 使用Lambda来设置回调
- 《Ext JS高级程序设计》节选:在CRUD操作中restful的设置以及使用Ext.Direct的问题
- 《Ext JS高级程序设计》节选:在CRUD操作中restful的设置以及使用Ext.Direct的问题
- 《Ext JS高级程序设计》节选:在CRUD操作中restful的设置以及使用Ext.Direct的问题
- Qt树形控件QTreeView使用1——节点的添加删除操作 复选框的设置
- 使用线程回调解决子线程无法操作主线程中定义的控件
- 使用js设置快捷键操作页面,js热键控制页面操作
- 在Python中使用lambda高效操作列表的教程
- 使用SIGALRM信号为阻塞操作设置超时
- jquery之操作元素属性和特性(设置特性值,attr(name,value),attr(attributes)方法的使用)
- 使用NPOI操作EXCEL时设置超链接和文字颜色
- cocos2d-x + Lua下场景不能使用setOnEnterCallback(func)等函数来设置回调的解决办法
- 使用Kotlin对ViewGroup的视图进行函数使操作
- 使用Guava+Spring实现异步回调操作,提高程序性能
- 在Python中使用lambda高效操作列表的教程(转)
- 你绝对想不通的kotlin,当使用lambda实现函数式接口时爬的“巨坑”
- Python使用crontab模块设置和清除定时任务操作详解
- 《Ext JS高级程序设计》节选:在CRUD操作中restful的设置以及使用Ext.Direct的问题...
- SSE2指令--使用SSE2的整型内存操作和初始化:设置(Set)
- Windows虚拟机使用vnc远程控制软件操作QTP,屏幕设置