Выразить «супер» дженерики в функциональных типах Котлина?

Я пытаюсь передать библиотеку RxJava и использовать функции расширения в Kotlin.

fun <T,R: MutableCollection<T>> Observable<T>.collectWhile(factory: (() -> R), condition: (R,T) -> Boolean) = compose(Transformers.collectWhile(factory,condition)) 

Transformers.collectWhile() написан на Java и имеет эту подпись:

 public static <T, R extends Collection<T>> Transformer<T, R> collectWhile(final Func0<R> factory, final Action2<? super R, ? super T> collect) 

Однако у меня возникает проблема с отображением аргумента collect и я не очень хорошо разбираюсь в дженериках. Как выразить super с функциональным типом?

ОБНОВИТЬ

Глупая ошибка с моей стороны. Я не должен был долгое время публиковать на SO.

Я на самом деле

 public static <T, R extends Iterable<?>> Transformer<T, R> collectWhile(final Func0<R> factory, final Action2<? super R, ? super T> collect, final Func2<? super R, ? super T, Boolean> condition) 

И это то, что я должен был сделать.

 fun <T,R: MutableCollection<T>> Observable<T>.collectWhile(factory: (() -> R), action: (R,T) -> Unit, condition: (R,T) -> Boolean) = compose(Transformers.collectWhile(factory,action,condition)) 

Тип шаблона Java ? super T ? super T соответствует проекции типа in T -типа в Kotlin, поэтому соответствующим типом параметра collect будет Action2<in R, in T> .

Этот тип примерно эквивалентен (или, более конкретно, имеет право на преобразование SAM ) в функциональный тип (R, T) -> Unit в Kotlin, потому что (R, T) -> Unit является синонимом типа Function2<R, T, Unit> а последний эквивалентен Function2<in R, in T, out Unit> из -за дисперсии объявления-сайта параметров типа Function2.

Вы не можете передать функцию типа (R, T) -> Boolean в качестве аргумента для collect , где ожидается (R, T) -> Unit .

Либо измените тип параметра collect , либо тип параметра условия`.

Intereting Posts
Kotlin на Android: наведите курсор на список коллекции kotlin, преобразующие карту в новую карту со значениями, вычисленными из оригинала Нет файла kotlin.js, сделанного kotlinc-js Android: дублирование фрагментов в FragmentManager Kotlin, когда несколько значений не работают, когда значение представляет собой вид android Разница между любым типом и дженериками в Котлине Единичное тестирование сопрограммы Kotlin с задержкой почему SomeClass :: class – это KClass <SomeClass>, но this :: class – это KClass <out SomeClass> Китгер 2 не распознает метод предоставления в Котлине. Java отлично работает Как вводить нестатические, по требованию NativeModules в React Native Android? Внутренний класс в своем абстрактном суперклассе в Котлине? Каков правильный способ создания экземпляра класса из KType Как я могу запустить один Android-тест с помощью Kotlin? Строительство проектов Kotlin с Gradle иногда не получается с NoClassDefFoundError Почему интерфейс, написанный в Kotlin, исчезает после перезагрузки в Android Studio?