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