在 Kotlin 中,带有接收者的函数类型是一种特殊的函数类型,它允许在函数体内访问接收者对象的成员。这种类型的主要用途之一是支持 DSL(领域特定语言)的构建,以提供更具表达性的 API。
下面是一个带有接收者的函数类型的基本语法和用法:
val myLambda: ReceiverType.() -> ReturnType = {
// lambda body
// 在此处可以使用 ReceiverType 的成员
// 返回值类型为 ReturnType
}
// 例如,调用
val result: ReturnType = myLambda(receiverInstance)
在这里:
ReceiverType
是接收者类型,指定了 Lambda 表达式可以在哪种类型的对象上调用。ReturnType
是 Lambda 表达式的返回类型。receiverInstance
是接收者对象的实例,通过它可以在 Lambda 表达式中访问接收者类型的成员。
下面是一个更详细的例子:
data class Person(var name: String, var age: Int)
val lambda: Person.() -> Unit = {
println("Name: $name, Age: $age")
age += 1
}
fun main() {
val person = Person("John", 25)
// 在 Lambda 表达式中,可以直接访问 Person 类的成员
person.lambda()
// 输出: Name: John, Age: 25
println("Updated Age: ${person.age}")
// 输出: Updated Age: 26
}
在上述例子中,Person.() -> Unit
定义了一个带有接收者的函数类型,允许在 Lambda 表达式内部访问 Person
类的成员。通过 person.lambda()
调用,Lambda 表达式中的代码可以直接访问 Person
对象的属性和方法。
这种函数类型的语法为构建 DSL 提供了强大的支持,使得在特定领域中创建更具表达性的 API 变得更加容易。
注意,你只需要把他看作为一个特殊的函数类型
典型应用
kotlin 作用域函数 apply ,also,let,run,with就是带有接收者函数类型的典型应用。看懂了此文章,再看相关源码自然通透。apply官方源代码如下:
/**
* Calls the specified function [block] with `this` value as its receiver and returns `this` value.
*
* For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#apply).
*/
@kotlin.internal.InlineOnly
public inline fun <T> T.apply(block: T.() -> Unit): T {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
block()
return this
}
学习资料分享
内容概要:Kotlin 入门教程指南、高级Kotlin强化实战和史上最详Android版kotlin协程入门进阶实战 。
内容特点:条理清晰,含图像化表示更加易懂。
由于文章内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要Kotlin全家桶学习资料,完整文档的可扫描下方二维码免费获取!!!!
《Kotlin入门教程指南》
第一章 Kotlin 入门教程指南
● 前言
第二章 概述
- 使用 Kotlin 进行服务器端开发
- 使用 Kotlin 进行 Android 开发
- Kotlin JavaScript 概述
- Kotlin/Native 用于原生开发
- 用于异步编程等场景的协程
- Kotlin 1.1 的新特性
- Kotlin 1.2 的新特性
- Kotlin 1.3 的新特性
第三章 开始
- 基本语法
- 习惯用法
- 编码规范
第四章 基础
- 基本类型
- 包
- 控制流:if、when、for、while
- 返回和跳转
第五章 类与对象
- 类与继承
- 属性与字段
- 接口
- 可见性修饰符
- 扩展
- 数据类
- 密封类
- 泛型
- 嵌套类与内部类
- 枚举类
- 对象表达式与对象声明
- Inline classes
- 委托
第六章 函数与 Lambda 表达式
- 函数
- 高阶函数与 lambda 表达式
- 内联函数
第七章 其他
- 解构声明
- 集合:List、Set、Map
- 区间
- 类型的检查与转换“is”与“as”
- This 表达式
- 相等性
- 操作符重载
- 空安全
- 注解
- 反射
- 类型安全的构建器
- 类型别名
- 多平台程序设计
- 关键字与操作符
第八章 Java 互操作与 JavaScript
- 在 Kotlin 中调用 Java 代码
- Java 中调用 Kotlin
- JavaScript 动态类型
- Kotlin 中调用 JavaScript
- JavaScript 中调用 Kotlin
- JavaScript 模块
- JavaScript 反射
- JavaScript DCE
第九章 协程
- 协程基础
- 取消与超时
- 通道 (实验性的)
- 组合挂起函数
- 协程上下文与调度器
- 异常处理
- select 表达式(实验性的)
- 共享的可变状态与并发
第十章 工具
- 编写 Kotlin 代码文档
- Kotlin 注解处理
- 使用 Gradle
- 使用 Maven
- 使用 Ant
- Kotlin 与 OSGi
- 编译器插件
- 不同组件的稳定性
第十一章 常见问题总结
- FAQ
- 与 Java 语言比较
- 与 Scala 比较【官方已删除】
由于文章内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要Kotlin全家桶学习资料,完整文档的可下滑到文末免费获取!!!!
《高级Kotlin强化实战 》
第一章 Kotlin 入门教程
- Kotlin 概述
- Kotlin 与 Java 比较
- 巧用 Android Studio
- 认识 Kotlin 基本类型
- 走进 Kotlin 的数组
- 走进 Kotlin 的集合
- 完整代码
- 基础语法
第二章 Kotlin 实战避坑指南
- 方法入参是常量,不可修改
- 不要 Companion、INSTANCE?
- Java 重载,在 Kotlin 中怎么巧妙过渡一下?
- Kotlin 中的判空姿势
- Kotlin 复写 Java 父类中的方法
- Kotlin “狠”起来,连TODO都不放过!
- is、as` 中的坑
- Kotlin 中的 Property 的理解
- also 关键字
- takeIf 关键字
- 单例模式的写法
第三章 项目实战《Kotlin Jetpack 实战》
- 从一个膜拜大神的 Demo 开始
- Kotlin 写 Gradle 脚本是一种什么体验?
- Kotlin 编程的三重境界
- Kotlin 高阶函数
- Kotlin 泛型
- Kotlin 扩展
- Kotlin 委托
- 协程“不为人知”的调试技巧
- 图解协程:suspend
《史上最详Android版kotlin协程入门进阶实战》
第一章 Kotlin协程的基础介绍
- 协程是什么
- 什么是Job 、Deferred 、协程作用域
- Kotlin协程的基础用法
第二章 kotlin协程的关键知识点初步讲解
- 协程调度器
- 协程上下文
- 协程启动模式
- 协程作用域
- 挂起函数
第三章 kotlin协程的异常处理
- 协程异常的产生流程
- 协程的异常处理
第四章 kotlin协程在Android中的基础应用
- Android使用kotlin协程
- 在Activity与Framgent中使用协程
- ViewModel中使用协程
- 其他环境下使用协程
第五章 kotlin协程的网络请求封装
- 协程的常用环境
- 协程在网络请求下的封装及使用
- 高阶函数方式
- 多状态函数返回值方式
第六章 深入kotlin协程原理(一)
- suspend的花花肠子
- 藏在身后的-Continuation
- 村里的希望-SuspendLambda
第七章 深入kotlin协程原理(二)
- 协程的那些小秘密
- 协程的创建过程
- 协程的挂起与恢复
- 协程的执行与状态机
第八章 Kotlin Jetpack 实战
- 从一个膜拜大神的 Demo 开始
- Kotlin 写 Gradle 脚本是一种什么体验?
- Kotlin 编程的三重境界
- Kotlin 高阶函数
- Kotlin 泛型
- Kotlin 扩展
- Kotlin 委托
- 协程“不为人知”的调试技巧
- 图解协程原理
第九章 Kotlin + 协程 + Retrofit + MVVM优雅的实现网络请求
- 项目配置
- 实现思路
- 协程实现
- 协程 + ViewModel + LiveData实现
- 后续优化
- 异常处理
- 更新Retrofit 2.6.0
由于文章内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要Kotlin全家桶学习资料,完整文档的扫描下方二维码免费获取!!!!
![](https://img-blog.csdnimg.cn/img_convert/13b7456f07a42b447a264cf61774e275.jpeg)