Во время работы над ответом из Как работает стирание в Котлине? Я обнаружил некоторые вещи, которые еще не понял, и не нашел источников, почему так происходит. .
Почему следующее не компилируется?
fun bar(foo: List<*>) = ""
fun bar(foo: List<*>) = 2
пока следующее есть?
fun bar(foo: List<String>) = ""
fun bar(foo: List<Int>) = 2
Для меня это становится еще более любопытным, когда добавляется универсальный тип, который даже не используется, то есть следующие компиляции тоже:
fun bar(foo: List<*>) = ""
fun <T> bar(foo: List<*>) = 2 // T isn't even used
Поскольку последний даже не использует T
и, как мы знаем, генерики стираются во время выполнения, почему этот работает, а вариант без универсального типа - нет?
В рамках метода байтового кода допускаются только отличающиеся по типу возврата (уже описано в выше связанном ответе ).
Любые намеки, источники и / или ссылки приветствуются.
Добавлен этот вопрос, теперь также на обсуждение. Kotlinlang.org .