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)

打印结果:

以上这篇Kotlin 使用Lambda来设置回调的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Kotlin中常见的符号详解

    前几年的Google I/O大会上,Google正式宣布,Kotlin将会成为Android开发的官方支持语言.除了Android外,Kotlin还可以完全作为服务端开发的语言,比如在未来的Spring 5就将对Kotlin提供强大的支持.以及浏览器编程语言,与JS进行交互. Kotlin是一门静态语言,支持多种平台,包括移动端.服务端以及浏览器端,此外,Kotlin还是一门融合了面向对象与函数式编程的语言,支持泛型.安全的空判断,并且Kotlin与Java可以做到完全的交互. 现在介绍Kotl

  • 解决Kotlin 类在实现多个接口,覆写多个接口中相同方法冲突的问题

    一.首先来看一个例子 package net.println.kotlin.chapter4 /** * @author:wangdong * @description:类实现接口的冲突问题 */ interface B{ fun x(): Int = 1 } interface C{ fun x(): Int = 0 } /**一个类实现了两个接口,两个接口中的方法相同,这个类在覆写的时候就会出现冲突*/ class D: B,C{ //当下面两个方法同时存在的时候,就会报方法相同的冲突 ov

  • Kotlin 匿名类实现接口和抽象类的区别详解

    我就废话不多说了,还是上代码吧 接口: interface OnBind { fun onBindChildViewData(holder: String, itemData: Any, position: Int) } lesson.does(object : OnBind { override fun onBindChildViewData(holder: String, itemData: Any, position: Int) { println(holder + itemData +

  • Kotlin中实体类的创建方式

    类的基本格式 class 类名{ } 属性的基本格式 var 属性名字 : 类型 下面是实体类代码 package com.dldw.entity import java.util.* class Demo { //var 声明的属性可以被二次赋值 val声明的是不可变属性,赋值以后不能在赋值,否则编译报错 //长整型 64位 注意后面加大写L var height: Long? = 0L //整型 32 位 var id : Int?= 0 //短整型 16位 var short :Short

  • 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

  • Kotlin中Lambda表达式与高阶函数使用分析讲解

    目录 Lambda表达式 高阶函数 小结 编程语言的发展,通过需求,不断的变化出新的特性,而这些特性就会使得编程变得更加的简洁. Lambda表达式 Lambda表达式的出现,一定程度上使得函数和变量慢慢的融为一体,这样做的好处大大的方便了回调函数的使用. 在很多的情况下,其实我们的函数就只有简单的几行代码,用fun就感觉有点重了,而且有的时候这么大的函数结构用起来,并不是非常的方便. Lambda表达式,其表达式为: {变量定义 -> 代码块} 其中: lambda 函数是一个可以接收任意多个

  • Python使用lambda表达式对字典排序操作示例

    本文实例讲述了Python使用lambda表达式对字典排序操作.分享给大家供大家参考,具体如下: lambda表达式也常用于字典排序,既然写到字典排序,那就把按键排序和按值排序都写写好了. 字典按键排序 显然按键排序,需要用字典中每个元素的第一项排序 dict = {'a':1,'b':2,'c':3,'d':4,'e':3,'f':1,'g':7} sorted_dict_asc = sorted(dict.items(),key=lambda item:item[0]) sorted_dic

  • C#对Word文档的创建、插入表格、设置样式等操作实例

    using Word; 下面的例子中包括C#对Word文档的创建.插入表格.设置样式等操作: (例子中代码有些涉及数据信息部分被省略,重要是介绍一些C#操作word文档的方法) public string CreateWordFile(string CheckedInfo) ...{ string message = ""; try ...{ Object Nothing = System.Reflection.Missing.Value; Directory.CreateDirect

  • jQuery实现获取及设置CSS样式操作详解

    本文实例讲述了jQuery实现获取及设置CSS样式操作.分享给大家供大家参考,具体如下: addClass():向被选元素添加一个或多个类 removeClass():从被选元素删除一个或多个类 toggleClass():对被选元素进行添加/删除类的切换操作 css():设置或返回被选元素的一个或多个样式属性 样式表实例: .important{ font-weight:bold; font-size:xx-large; } .blue{ color:blue; } addClass() <!

  • 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 mC

  • Django设置Postgresql的操作

    这里假定Postgresql数据库已经装好. 首先安装依赖的包 $ sudo yum install python-devel postgresql-devel 如果使用virtualenv,先source一下virtualenv下的" . bin/activate",然后运行 $ pip install psycopg2 修改settings.py文件 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresq

  • pycharm软件实现设置自动保存操作

    pycharm一般安装完毕,就是默认是自动保存的,但是......但是....既然是程序,既然是软件,就难免出现bug.也许会有码友出现头天晚上写好的代码,打开一看,第二天白花花一片!!!泪奔有没有 最简单的,就是每次编写完毕,习惯按 ctrl + s 手动保存. 但是,提醒你务必检查一下你的设置里面,是不是码友弄好自动保存! 步骤如下: 菜单File -> Settings... -> Appearance & Behavior -> System Settings 记住勾上2

  • keras的backend 设置 tensorflow,theano操作

    win7 系统环境安装步骤: 1.首先是安装Python,建议安装anaconda 2.安装完anaconda后打开anaconda promp命令行promp,输入conda list. 可以看到已经安装的库以及版本等信息,注意此时没有keras. 3.通过 conda install keras 或 pip install keras 直接安装.(会默认的给你安装keras最新版本和所需要的theano) 4.安装完成之后,就可以打开notebook,输入import keras 检查是否成

  • Vue props中Object和Array设置默认值操作

    我就废话不多说,看代码吧~ seller: { type: Object, default() { return {} } } seller: { type: Object, default: function () { return {} } } 当父组件没有传这个值或者值是空时,输出的话,返回: 下面这种是错误的 seller: { type: Object, default: () => {} } 当父组件没有传这个值或者值是空时,输出的话,这时是返回underfind,在template

随机推荐