Kotlin-Lambda表达式

2020-04-21  本文已影响0人  郑了了了

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){

    })

上一篇 下一篇

猜你喜欢

热点阅读