我看到了question .
怎么能添加这条线
fun Int.toUpperCase() = ""
这个问题
错误:(6,16)重载分辨率歧义:@InlineOnly public inline fun 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 回答
如果再次在文件中定义
fun String.toUpperCase() = ""
,它甚至可以工作 . 编译器选择要使用的本地定义函数,不再考虑模糊函数 . 由于ab
变为Nothing?
并且这是所有可空类型的子类型,因此任何接收器都会实现这一点 .如图所示:
不会调用来自stdlib的
substringBefore
,因为使用了本地定义的扩展名 .