“重载解析模糊度错误”与另一个重载解决
我看到了这个问题 。
怎么可能是这条线添加了
fun Int.toUpperCase() = ""
这个问题
错误:(6,16)
重载分辨率模糊性:
@InlineOnly public inline fun Char.toUpperCase():在kotlin.text中定义的字符
@InlineOnly public inline fun String.toUpperCase():在kotlin.text中定义的字符串
离开这段代码?
fun main(args: Array){ var ab: String? = "hello" ab = null println(ab?.toUpperCase()) }
给出的参考问题的答案是有道理的,它只是不回答这里发生的事情。
它甚至可以工作,如果你再次在你的文件中定义fun String.toUpperCase() = ""
。 编译器选择使用本地定义的函数,不再考虑模糊的函数。 由于ab
变得Nothing?
这是所有可空types的子types,任何接收者都会做到这一点。
检查这一个:
fun main(args: Array) { println("hello".substringBefore("e")) } fun String.substringBefore(e: String) = "hey"
stdlib中的substringBefore
将不会被调用,因为使用了本地定义的扩展。