"过载分辨率模糊错误"解决了另一个重载

时间:2017-12-20 10:15:03

标签: kotlin

我看到了Working example

添加这一行怎么可能

fun Int.toUpperCase() = ""

这个问题

  

错误:(6,16)
  过载分辨率模糊:
  @InlineOnly公开   内联乐趣Char.toUpperCase():在kotlin.text中定义的char   @InlineOnly public inline fun String.toUpperCase():在kotlin.text中定义的字符串

为这段代码消失了吗?

fun main(args: Array<String>){
    var ab: String? = "hello"
    ab = null
    println(ab?.toUpperCase())
}

对于参考问题给出的答案是有道理的,它只是没有回答这里发生的事情。

1 个答案:

答案 0 :(得分:0)

如果您再次在文件中定义fun String.toUpperCase() = "",它甚至可以正常工作。编译器选择使用本地定义的函数,不再考虑模糊的函数。由于ab变为Nothing?并且这是所有可空类型的子类型,因此任何接收器都会实现此目的。

这里显示:

fun main(args: Array<String>) {
    println("hello".substringBefore("e"))
}

fun String.substringBefore(e: String) = "hey"
来自stdlib的

substringBefore将不会被调用,因为使用了本地定义的扩展名。