Kotlin: функция расширения против функции-члена с диспетчером отправки - PullRequest
0 голосов
/ 22 мая 2018

Kotlin имеет функцию расширения A.to(that: B), которая принимает любые два типа параметров и возвращает Pair<A,B>.Теперь у меня есть класс с функцией to, который принимает два аргумента.

В основном две разные функции to имеют точный синтаксис, и функция в классе маскируется расширением.

Пример :

// following return Pair<k,v>
fun convert(value:K, converter: org.jooq.Converter<K,V>) = converter.to(value)

Конвертер Jooq - довольно популярный класс для преобразования класса, совместимого с базой данных, в пользовательский класс.

Согласно Котлину документация , функции расширения имеют приоритет над методами класса, что не имеет смысла для методов расширения, предоставляемых пакетом kotlin, поскольку их область действия является глобальной.Существует квалифицированный-это обходной путь для выхода за пределы функций расширения, но, похоже, он здесь не помогает

Редактировать: fun convert сам по себе является функцией расширения.В противном случае функция-член имеет приоритет.

1 Ответ

0 голосов
/ 22 мая 2018

Типы, указанные в вопросе, не совпадают: Converter<K, V>.to занимает V, а не K.Поэтому converter.to(value) разрешается в методе расширения просто потому, что он не может быть методом-членом.

Конечно, это означает, что ваш собственный ответ тоже не сработает;возможно, вы изменили некоторые типы, и если вы попробуете converter.to(value), теперь это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...