Kotlin 的 Lambda 表达式
文章本人学习所写,不适合作为学习资料
kotlin高阶函数
首先你有一个 a 方法需要调用另一个 b 方法,你在方法a里面调用就可以
如果我想动态设置的不是方法参数,而是方法本身?
在 Java 里是不允许把方法作为参数传递的,但是我们有一个变通方案:接口。我们可以通过接口的方式来把方法包装起来
void receiveMessage(Message message){
message.getMessage(message)
}
interface Message{
String getMessage(String message)
}
receiveMessage(message1)
这里本质上其实是传过来一个可以在稍后被调用的方法(getMessage())。只不过因为 Java 不允许传递方法,所以我们才把它包进了一个对象里来进行传递。
而在kotlin,函数参数是可以为函数类型的,当一个函数含有函数类型的参数的时候,如果你调用它,你就必须传入一个函数类型的对象给它;
fun b(a:(Int)->String):String{
return a(1)
}
fun c(index:Int):String{
return "aa"
}
b(::c)//加两个冒号的表示函数作为对象传递(函数类型的对象)
(::c)(1)
什么是Lambda?
Lambda 其实是一个函数类型的对象而已
textview.setOnClickListener(object :View.OnClickListener{//object:对象的申明
override fun onClick(v: View?) {
v?.id
}
})
textview.setOnClickListener {
it.id//唯一参数默认名字:it
}
textview.setOnClickListener(fun(v:View){
v.id
})
textview.setOnClickListener{v:View->
v.id
}
baseQuickAdapter?.setOnItemClickListener(object :BaseQuickAdapter.OnItemClickListener{
override fun onItemClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) {
}
})
baseQuickAdapter?.setOnItemClickListener{
adapter,view,position->
}
baseQuickAdapter?.setOnItemClickListener(fun(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int){
})
网友评论