Kotlin-高阶函数的使用(二)

作者: 我是黄教主啊 | 来源:发表于2018-10-31 22:31 被阅读90次

文章目录:

上一篇文章带大家认识到了什么是高阶函数,那这一章就带大家看看高阶函数的实际使用场景吧

提问

我们想一想,高阶函数带给我们的是什么,我们为什么要使用它呢?因为他可以让我们的方法更简单高效,能去掉冗余的样板代码,让我们关注的逻辑更清晰的展现在我们的面前,所以高阶函数一定是用在我们的方法实现上,而官方api其实已经将我们常用的快捷操作用高阶函数给封装好了,比如with,apply等操作符,所以剩下的就是接口调用了。

不知道大家用Kotlin实现过OnClickListener接口没有,有3种写法:

青铜版:

 view.setOnClickListener(object :View.OnClickListener{
            override fun onClick(v: View?) {
                  //啊!我被点击了
            }
        })

黄金版

view.setOnClickListener { v ->
            {
                //啊!我被点击了  
            }
        }

钻石版

 view.setOnClickListener {
                //啊!我被点击了  
        }

我们一对比发现,代码是一步一步被省略的,首先是省略了接口声明(转化为了lambda),其次是省略了lambda的花括号(Kotlin的特性,当参数只有一个lambda参数的时候,括号可以省略),所以我们要实现的是如何将接口声明转化为lambda,哈哈,这不正是我们高阶函数所擅长的吗

实现

虽然我们不能直接看到kotlin内部的高阶函数的实现方式,但是我们按住ctrl键将鼠标移到方法上是可以看到高阶函数的声明方式的,如你所见是这样的:

public final fun setOnClickListener( l: ((v: View!) → Unit)! ): Unit

看过我上篇文章的一眼就能看明白,这是声明了一个以view为参数的无返回值的高阶函数,但他是如何实现的呢,请看以下代码:

public final fun setOnClickListener( l: ((v: View!) → Unit)! ): Unit{
    //将接口实现并赋值给全局变量接口方便接口方法调用
    mOnClickListener = object :View.OnClickListener{
                  override fun onClick(v: View?) {
                           l.invoke(v) //关键是这句
                  }
              }
}

原理就是内部将接口给实例化,然后将逻辑通过invoke方法代理出去,这样我们点击事件内部就会走invoke方法啦。而invoke实际是一个接口(翻译成java代码你就明白啦),所以我们在方法外面实现的其实是invoke的接口实现逻辑,注意,这种接口的实现方式只能在接口只有一个方法的时候哦,因为invoke只有一个,哈哈,怎么样,setOnClickListener的处理逻辑小伙伴们明白了吗,举一反三的事情就交给各位勤奋的小伙伴了.

相关文章

  • Kotlin使用技巧(一)-接口与命名参数的优雅运用

    抛出问题 看过我的Kotlin-高阶函数的使用(二)都知道,我们的setOnClickListener可以这样写:...

  • kotlin从入门到看开 ₆

    layout: posttitle: "kotlin-高阶函数"subtitle: "这个世...

  • Kotlin-高阶函数的使用(二)

    文章目录: Kotlin-高阶函数的使用(一) 上一篇文章带大家认识到了什么是高阶函数,那这一章就带大家看看高阶函...

  • Kotlin-高阶函数的使用(一)

    1.定义:什么是高阶函数 高阶函数就是以另一个函数作为参数或返回值的函数,Kotlin可以以lambda或参数引用...

  • Kotlin-高阶函数

    函数入门 今天我们来讲解Kotlin的函数一说到函数,很多同学可能脑子里面是这样的一个概念。 我们高中数学经常与函...

  • Kotlin-高阶函数

    介绍 Kotlin是函数式编程,所以可以把函数作为参数传递给函数,或者作为函数的返回值使用,我们称其为高阶函数。本...

  • kotlin-高阶函数

    定义:一个用函数作为参数或者返回值的函数如何定义:()->Unit 括号里面代表函数的参数,箭头后面代表函数的返回...

  • Kotlin-高阶函数

    高阶函数的作用 就是用来定义函数式编程里面接收Lambda表达式的函数。 高阶函数的定义 如果一个函数接收另一个函...

  • Kotlin Function vs Lambda

    函数定义方式: Lambda定义方式: 高阶函数定义: 高阶函数使用:

  • Kotlin-为什么要使用高阶函数?

    1、为什么要使用高阶函数? 先来看看两段代码,在Andriod自定义View中的一个小例子,分别用Java和Kot...

网友评论

本文标题:Kotlin-高阶函数的使用(二)

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