美文网首页Kotlin学习
Kotlin学习2-接口回调

Kotlin学习2-接口回调

作者: 海内灬存知己 | 来源:发表于2022-08-29 19:58 被阅读0次

    java有接口回调,那么kotlin当然也有,而且比Java更简单,更高效!例如如下方法:

     //添加inline的目的是可以节约内存,匿名函数不会创建对象
        private inline fun method1(name: String, password: String, result: (String, Int) -> Unit) {
            if (name == "haha" && password == "123456") {
                result("sucess", 200)
            } else {
                result("fail", 300)
            }
        }
    

    result: (String, Int) -> Unit这个参数就可以被认为是一个接口,这个是什么呢?它像不像一个未完成的匿名函数?所以匿名函数的作用就是体现在这里!这其实就是声明了传入类型无返回值的匿名函数。

    如何调用?

    写法一:这个比较特殊,参数可以写到外面(其实按照正常理解应该写到括号里),这是最常见的调用方式

            method1("haha", "123456") { msg: String, code: Int ->
                println("msg:$msg,code:$code")
            }
    

    写法二:这种写法是正确的,但是不推荐,代码优雅性差,但是写法一明显是由写法二优化来的,可以通过它去理解写法一

            method1("haha", "123456", { msg: String, code: Int ->
                println("msg:$msg,code:$code")
            })
    

    //写法三:比上面好点,但是也不是最推荐的写法

            method1("haha", "123456", result = { msg: String, code: Int ->
                println("msg:$msg,code:$code")
            })
    

    //写法四:函数引用,因为method1是inline的,所以性能是没有影响的,好处是抽离出来,别人也可以用
    ::result这样写才是函数对象,才可以被当作参数调用

       fun main() {
            method1("haha", "123456", ::result)
        }
       private fun result(msg: String, code: Int) {
            println("msg:$msg,code:$code")
        }
    

    最后,写一个匿名函数的完整版,kotlin的接口回调就是基于这个匿名函数的

            val result: (String, Int) -> Any = { msg, code ->
                println("msg:$msg,code:$code")
            }
            result("sucess", 200)
        }
    

    相关文章

      网友评论

        本文标题:Kotlin学习2-接口回调

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