3
我试图弄清当重写一个现有的类功能,具有相同签名的扩展功能 - 会生效吗?Kotlin:当扩展函数隐藏类的默认实现?
这里是我的示例代码:
fun String.toUpperCase(): String = "ext. function impl."
fun main(args: Array<String>) {
println("Hello".toUpperCase()) // ext. function impl.
println(MyClass().toUpperCase()) // class impl.
}
class MyClass {
fun toUpperCase() : String {
return "class impl."
}
}
fun MyClass.toUpperCase() : String {
return "ext. function impl."
}
所以:
- 什么是规则?什么时候会被调用?
- 我怎样才能覆盖这个决定?可能吗?
这种行为实际上在'kotlin-stdlib'的一些地方发生了变化(例如[here](https://github.com/JetBrains/kotlin/blob/master/libraries/stdlib/src/generated/_Maps)。 kt#L133)),但这是通过'kotlin.internal.HidesMembers'完成的,显然这是一个内部工具,不适用于第三方代码。这很好。 – hotkey