“重载解析模糊度错误”与另一个重载解决

我看到了这个问题 。

怎么可能是这条线添加了

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将不会被调用,因为使用了本地定义的扩展。