«Ошибка неоднозначности разрешения перегрузки» разрешена с другой перегрузкой

Я видел этот вопрос .

Как может быть, что с этой линией добавлено

fun Int.toUpperCase() = "" 

Эта проблема

Ошибка: (6, 16)
Недостаток разрешения перегрузки:
@InlineOnly public inline fun Char.toUpperCase (): Char, определенный в kotlin.text
@InlineOnly public inline fun String.toUpperCase (): Строка, определенная в kotlin.text

уходит за этот кусок кода?

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

Ответ, данный для справочного вопроса, имеет смысл, он просто не отвечает на то, что здесь происходит.

Это даже работает, если вы fun String.toUpperCase() = "" определяете fun String.toUpperCase() = "" в своем файле. Компилятор выбирает локально определенную функцию, которая будет использоваться, и больше не будет рассматривать неоднозначные. Поскольку ab становится Nothing? и это подтип всех типов с нулевым значением, любой получатель сделает это.

Проверьте это:

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

substringBefore из stdlib не будет вызываться, потому что используется локально определенное расширение.

Intereting Posts
Android JUnit тест блокирует бесконечно, когда Observable наблюдается на AndroidSchedulers.mainThread () Общий код между сервером Kotlin и клиентскими проектами с использованием Gradle Класс Android с контекстом в поле объекта в Котлине Несоответствие типов в ArrayOfNulls с Kotlin Использование типа Java Void в Котлине Есть ли официальный путеводитель по Kotlin? Kotlin: Reified generics, похоже, не работают правильно для сравнения hash / equals Связи сущностей в Android-комнате Поток Akka, выше по потоку, не производя значения Создать класс расширить AsyncTask без утечки контекстного объекта в Android Kotlin Может ли кто-нибудь сказать мне, как работает компилятор kotlin? Какова его архитектура? Ярлык для «Преобразовать java-код (не файл) в kotline" Intellij IDEA отладчик не работает над проектом Gradle Vert.X Лучшая практика доступа к собственности в Котлине При использовании setcontentview в BottomsheetDialog возникает ошибка, например: «ни одна из следующих функций не может быть вызвана с предоставленными аргументами»