Kotlin中带类名前缀的函数声明Parent.createWork是什么含义?
Kotlin
Parent.createWork 语法解答 语法定义
你看到的带点的函数声明是Kotlin的扩展函数(Extension Function),是Kotlin原生提供的语法特性,作用是不需要修改原有类/接口的源码,就能给指定类型新增可调用的函数。
核心特性说明
- 声明时,点左侧的类型叫做接收者类型,表示这个扩展函数是给哪个类型新增的能力,你示例中的
Parent就是接收者类型 - 扩展函数不会真的修改原有类型的内部结构,所以你在
Parent接口的定义里找不到createWork是完全正常的,它本质是语法糖封装的静态工具函数,只是调用写法和普通成员函数一致
示例代码的特殊逻辑
你贴的代码里的扩展函数定义在Children类内部,属于成员扩展函数,同时持有两个隐式接收者:
- 扩展接收者:即
Parent类型的实例,也就是调用createWork的对象,函数内部可以直接访问该实例的所有公开成员 - 分发接收者:即当前
Children类的实例,函数内部可以直接访问Children的所有成员(包括私有成员)
代码里create方法直接调用createWork没有加前缀,是因为Children本身实现了Parent接口,当前实例同时符合扩展接收者的类型要求,所以可以省略调用前缀。
另外你代码里的两个Parent.createWork是重载关系,双参数版本拼接参数后调用单参数版本,最终返回一个函数类型实例,接收MyWork参数并修改它的name属性。
学习方向
直接搜索「Kotlin 扩展函数」就能找到对应学习资料,延伸学习可以覆盖扩展属性、带接收者的函数字面量、Kotlin DSL实现等知识点,这类写法在Kotlin生态的协程、Gradle Kotlin DSL、Spring Kotlin API等场景中应用非常普遍。
内容的提问来源于stack exchange,提问作者Sam YC
相关产品推荐
相关产品推荐

