Java 回调 和 kotlin的回调

A类

var onCheckedListener: ((flag: Boolean) -> Unit)? = null

onCheckedListener?.invoke(true、false)


B类 调用 A 中 的结果

A.onCheckedListener.let {

  Log.e("1111111111111", "是否点击${it}")

}
A

lateinit  var onCheckedListener: (flag: Boolean) -> Unit

onCheckedListener(true、false)

B

A.onCheckedListener= {

   Log.e("1111111111111", "是否点击${it}")

}

函数类型

Kotlin中一切皆是对象,函数也不例外。在Kotlin中,函数本身也是对象,可以拥有类型并实例化。Kotlin 使用类似 (Int) -> String 的一系列函数类型来处理函数的声明,比如我们常见的点击回调函数:

 Main.class(A) 调用了 Person.class(B) 中的方法,B回调给A,及B的值返回给A,A就会的得到值

val onClick:(View)->Unit={}

生成Person类及MyInterface 接口

class Person {
    val name:String = "Person"
    lateinit var  mListen:MyInterface
    fun  setListeren(listen:MyInterface){
        this.mListen=listen
        this.mListen?.poo("poo:$name")
    }
    interface  MyInterface{
        fun poo(str:String)
    }


}

fun main(args: Array<String>) {
    println("hellow word")
    var person = Person()
    person.setListeren(object :Person.MyInterface{
        override fun poo(str: String) {
            println(str)
        }
    })
   
}

打印结果

hellow word
invoke:Person

以上是用原java写法来实现kotlin回调的,目的是从java转来的人好理解,看看kotlin是如何简化java代码的

class Person {
    val name:String = "Person"

// 声明mListen是一个函数(单方法接口),入参String,无返回值
    lateinit var mListen:(String) ->Unit
    fun setListeren(listener:(String) ->Unit){
        this.mListen=listener
        this.mListen("invoke:$name")
        //等于 mListen?.invoke("invoke :" +name)  X()等同于X.invoke()
      //  mListen?.invoke("invoke:$name")
    }

}
fun main(args: Array<String>) {
    println("hellow word")
    var person = Person()
    person.setListeren { println(it) }
}

打印结果

hellow word
invoke:Person

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄毛火烧雪下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值