| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Kotlin基础语法 十二、lamdba表达式解析三(函数类型) -> 正文阅读 |
|
[移动开发]Kotlin基础语法 十二、lamdba表达式解析三(函数类型) |
前言因为在kotlin的官网中,对lamdba的介绍篇幅有限而且没有逻辑, 所以在我最初开始接触kotlin的时候,我对kotlin的lamdba表达式有非常多的困惑,为此我花了接近一天的时间,浏览了网上几十篇的文章,才慢慢总结整理了kotlin的lamdba表达式知识点,其中关于 函数类型 讲的最清楚直白的应该是 扔物线 大神的一篇文章: 一、函数类型的由来在 Java 里,如果你有一个 a 方法需要调用另一个 b 方法,你可以直接在a方法的方法体里面调用:
但这样我们无法动态的传递参数给b方法,
不过……如果我们想动态设置的不是方法参数,而是方法本身呢?比如我在 a 的内部有一处对某个方法的调用,这个方法可能是 b,可能是 c,不一定是谁,我只知道,我在这里有一个调用,它的参数类型是 int ,返回值类型也是 int ,而具体在 a 执行的时候内部调用哪个方法,我希望可以动态设置,
但是在 Java 里是不允许把方法作为参数传递的,但是确实有一个变通方案:接口。我们可以通过接口的方式来把方法包装起来,
然后把这个接口的类型作为外部方法的参数类型:
在调用外部方法时,传递接口的对象来作为参数:
在Android 中最典型的例子就是我们的点击事件:所谓的点击事件,最核心的内容就是调用内部的一个 OnClickListener 的 onClick() 方法:
而所谓的这个 OnClickListener 其实只是一个壳,它的核心全在内部那个 onClick() 方法。换句话说,我们传过来一个 OnClickListener:
本质上其实是传过来一个可以在稍后被调用的方法(onClick())。只不过因为 Java 不允许传递方法,所以我们才把它包进了一个对象里来进行传递。 二、Kotlin的函数类型在 Kotlin 里面,函数的参数也可以是函数类型的,也就是我们可以传递一个函数(其实是函数的对象)给函数作为参数并在方法体内调用。 函数类型:用来声明一个函数参数和返回值形式的 特殊数据类型
同样的,函数类型不只可以作为函数的参数类型,还可以作为函数的返回值类型
这种参数或者返回值为函数类型的函数,在 Kotlin 中就被称为高阶函数。
记住: 三、匿名函数要传一个函数类型的参数,或者把一个函数类型的对象赋值给变量,除了用双冒号来拿现成的函数使用,你还可以直接把这个函数挪过来写: 但我们这么写,会很麻烦并且代码也不美观,所以进一步的简化,就是lamdba表达式的形式了。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 19:37:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |