¿Expresar "súper" generics en los types funcionales de Kotlin?

Estoy tratando de portar una biblioteca RxJava y aprovechar las funciones de extensión en Kotlin.

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

Transformers.collectWhile() está escrito en Java y tiene esta firma:

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

Sin embargo, tengo un problema con el mapeo del argumento de collect y no soy bueno con los generics. ¿Cómo expreso super con un tipo funcional?

ACTUALIZAR

Estúpido error de mi parte. No debería haber estado publicando en TAN tarde en la noche.

En realidad estaba apuntando a esto

 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) 

Y esto es lo que debería haber hecho.

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

Tipo de comodín de Java ? super T ? super T corresponde a la proyección del tipo de sitio de uso in T en Kotlin, por lo que el tipo correspondiente de parámetro de collect sería Action2<in R, in T> .

Ese tipo es más o less equivalente (o más específicamente es elegible para la conversión de SAM ) a (R, T) -> Unit Tipo de (R, T) -> Unit funcional en Kotlin, porque (R, T) -> Unit es un sinónimo de tipo Function2<R, T, Unit> y la segunda es equivalente a la Function2<in R, in T, out Unit> debido a la varianza del sitio de statement de los parameters del tipo de Función2.

No se puede pasar una function de tipo (R, T) -> Boolean como un argumento para collect , donde (R, T) -> Unit se espera.

Cambie el tipo de parámetro de collect o el tipo de parámetro de condition .

  • RxKotlin - Single.just () no se emite al suscribirse TestSubscriber
  • Obtiene N últimos objects emitidos por observables en RxJava2
  • Spring 5 and Kotlin 1.1 Coroutines: Type rx.Scheduler no presente
  • Múltiples requestes de modificación2 usando Flowable en Kotlin
  • Agregar subscribeOn () está cambiando el tipo de retorno de observable
  • RxKotlin flattenAsObservable (): no coincide con el método de reference
  • No se puede cambiar el text de ActionMenuItemView con RxKotlin
  • La biblioteca de Kotlin 'rxkotlin-0.21.0.jar' tiene un formatting no compatible. Actualice la biblioteca o el complemento
  • RxKotlin collectInto () MutableList usando references de método
  • RxAndroid, cómo detectar si observable ha finalizado la emisión
  • Cómo comprimir algunos observables en lenguaje Kotlin con RxAndroid