小编Kyl*_*ang的帖子

Kotlin 允许与具有不同返回类型的属性 getter 相同的函数签名

更新 2020-12-23

起源描述有点混乱。Kotlin 不仅允许在子类中使用 getter 相同的签名,而且在自类中也允许使用相同的签名。所以这也是允许的:

open class BaseRequest {
    val params = mutableMapOf<String, String>()
    fun getParams(): List<String> {
        return params.values.toList()
    }
}
Run Code Online (Sandbox Code Playgroud)

正如@Slaw 所说,这是 kotlin 编译器的行为,因为 JVM 使用地址而不是“签名”调用正确的方法,所以它可以工作。


我遇到了一种情况,似乎 Kotlin 允许子类创建与超类的 getter 相同的签名。

通常,函数具有相同的签名并且不允许不同的返回类型。所以我对这种情况感到困惑。我不确定这是否是故意的。

这是一个示例:

open class BaseRequest {
    val params = mutableMapOf<String, String>()

    init {
        params["key1"] = "value1"
    }
}

class SpecificRequest : BaseRequest() {
    init {
        params["key2"] = "value2"
    }

    fun getParams(): List<String> {
        return params.values.toList()
    }
}
Run Code Online (Sandbox Code Playgroud)

MediatorRequest 有一个函数getParams(),它与它的超类具有相同的签名,但具有不同的返回类型。在使用这个函数时,子类和超类似乎有相同声明的不同实现。

fun main() {
    val specificRequest …
Run Code Online (Sandbox Code Playgroud)

kotlin

6
推荐指数
1
解决办法
161
查看次数

标签 统计

kotlin ×1