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

Я пытаюсь передать библиотеку 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
Каковы возможные значения, которые могут быть даны `@ Suppress` в Котлин? Как умножить nullsafe float в котлин? Как сделать сумму элементов для нескольких списков в kotlin Почему объектам, находящимся внутри объекта сопутствующего объекта Kotlin, не удается получить доступ к «статически», когда другие члены могут? Почему Guice не находит привязку List <Interface>? Настроить автоматическое завершение IntelliJ для сценария градиента в kotlin Объявление пользовательской «чистой» задачи при использовании стандартных плагинов жизненного цикла Gradle запрещено Является ли Kotlin / Native полезным для себя? Как получить доступ к атрибутам / методам в стандартном параметре класса Что такое идиоматический способ Котлин, чтобы получить Логгера? kotlin setter infinte рекурсия Как настроить Kotlin на Android Studio? Android – использование генераторов для 1 повторного вызова RxJava, возвращающего различные типы, используя тот же интерфейс Правильно расширить класс Widget с помощью Kotlin Захват и сохранение изображения с помощью Kotlin в Android Studio