首页 > 解决方案 > Kotlin 扩展函数是否隐式声明成员变量?

问题描述

我有一个数据类User

data class User(name: String?, email: String?)

我创建了一个扩展函数来获得最佳标识符(首先是名称,然后是电子邮件)

fun User.getBestIdentifier(): String {
    return when {
        !this.name.isNullOrBlank() -> this.name
        !this.email.isNullOrBlank() -> this.email
        else -> ""
}

但是我注意到在我的 IDE 中,如果我去掉所有的this单词,它仍然可以编译和运行。像:

fun User.getBestIdentifier(): String {
    return when {
        !name.isNullOrBlank() -> name
        !email.isNullOrBlank() -> email
        else -> ""
}

我的结论是 Kotlin 扩展函数隐式支持成员变量,但我不确定。有没有人有任何关于这种现象的文档或解释它为什么/如何发生?

标签: kotlinthisextension-function

解决方案


文档状态:

扩展函数中的this关键字对应于接收者对象。

在您的情况下,User是接收者对象,因此this完全指的是该对象。

可以在此站点上找到另一个参考,其中描述了该this表达式:

在扩展函数或带有接收器的函数文字中,this表示在点的左侧传递的接收器参数。

更远:

在调用成员函数时this,可以跳过this


推荐阅读