Kotlin开发 lambda开发


前言

  在体验kotlin后,你一定会kotlin实现一些简单的接口回调方法的lambda印象深刻。例如下面的代码:

        val button = Button(this)
        button.setOnClickListener { 
            //在此处实现点击逻辑
        }

这大大的减少了重复的模板代码。提高了代码的阅读效率。所以,此篇博客讲解我们如何实现这种lambda接口回调。

 

回调lambda

代码

class MainActivity : AppCompatActivity() {
    private lateinit var listener: (String) -> Unit 

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        setOnListener { textView.text = it }

        Handler().postDelayed(Runnable {
            listener.invoke("触发成功")
        }, 1000)

    }

    fun setOnListener(str: (String) -> Unit){
        listener = str
    }
}

1.首先在创建一个延后初始化的全局变量 private lateinit var listener: (String) -> Unit

2.然后实现setOnListener方法

3.最后的重点是使用invoke发布数据,我这里使用了一个Handler模拟延迟的数据回调

 

其他

class FunTest {
    /**
     *   funTest.example { s, i -> println("$s $i") }
     */
    fun example(out: (String, Int) -> Unit) {
        out("11", 1)
    }

    /**
     * 非内联函数
     *     funTest.example2 {if (it.isEmpty()) return@example2 }
     */
    fun example2(str: (String) -> Unit) {
        str.invoke("demo")
    }

    /**
     * 内联函数
     *      funTest.example2_1 {if (it.isEmpty()) return}

     */
    inline fun example2_1(str: (String) -> Unit) {
        str.invoke("demo")
    }

    /**
     * funTest.example3( str1 = { println(it) }, str2 = { println(it)})

     */
    inline fun example3(str1: (String) -> Unit, str2: (String) -> Unit) {
        str1("str1")
        str2("str2")
    }
    
}

 

 

 

 

End


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM