том же пакете есть код вызывающий Iterable<Pair<K, V>>.toMap(). Но в результате вызвается не функция расширения Iterable<Pair<K, V>>T.toMap(), а мой T.toMap(). Я что-то не понимаю, почему так? Единственная мысль, что T.toMap() перекрывает вызовы к любым другим методам toMap().
Ваш toMap подходит и лежит в том же пакете, поэтому приоритетнее toMap лежащего где-то в stdlib. Скорее всего, если импортировать второй toMap явно, то будет выбираться он.
Понятно, век живи век учись. Спасибо :)
Мне кажется, в данном случае лучший вывод такой: Any.reflectionMagic() - это плохо.
Если вам интересно, это описано в спеке https://kotlinlang.org/spec/overload-resolution.html#call-with-an-explicit-receiver
Обсуждают сегодня