美文网首页kotlinAndroid进阶
我的Kotlin 学习之路(三)Kotlin之回调监听

我的Kotlin 学习之路(三)Kotlin之回调监听

作者: 活着工作室 | 来源:发表于2017-06-06 15:13 被阅读2743次

    kotlin的回调与java在写法上略有不同,直接上代码
    (为了好理解,我先按java写法,不用Lambda)

    1、生成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)  
        }
    }
    

    2、在Main或Activity中回调

    fun main(args: Array<String>) {
        println("Hello, world!") 
        var person = Person()
        person.setListeren(object : Person.MyInterface {//object的作用是调用内部匿名类
            override fun poo(str:String) {
                println(str)
            }
         })   
    }
    
    

    3、打印结果
    Hello, world!
    poo :Person

    以上是用原java写法来实现kotlin回调的,目的是从java转来的人好理解

    那么重点在下面
    我们刚才只是用java的习惯来实现了kotlin语言的回调,那么抛开java习惯,用kotlin习惯应该怎么写呢?

    先认识一个概念
    函数 : 一个单方法的接口

    再上代码,看看kotlin是如何简化java代码的

    class Person {
        val name:String = "Person"
        lateinit var mListen: (String) -> Unit // 声明mListen是一个函数(单方法接口),入参String,无返回值
    
        fun setListeren(listener: (String) -> Unit){
            this.mListen = listener
            this.mListen("invoke :" +name) //等于 mListen?.invoke("invoke :" +name)  X()等同于X.invoke()
               
        }
       
        //不再需要声明接口类!
    }
    
    fun main(args: Array<String>) {
        println("Hello, world!") 
        var person = Person()
        person.setListeren{ println(it) }  // 只有一个参数的简化结果 it代表入参 String类 
    }
    

    打印结果
    Hello, world!
    invoke :Person

    这就是kt语言!函数思维模式,不同于java,慢慢习惯就好了

    相关文章

      网友评论

      • 小川君:如果是多函数的回调,是仿java还是另有其他的写法
      • 3191134197b7:person.setListeren应该有两种方式实现一个是楼主您写的这样person.setListeren{}
        还有一个是person.setListeren()请问小括号的这种方式怎么去实现啊?
        活着工作室:@3191134197b7 见小2内,有写

      本文标题:我的Kotlin 学习之路(三)Kotlin之回调监听

      本文链接:https://www.haomeiwen.com/subject/zcegfxtx.html