¿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 .

  • Excepción causada por: java.lang.ClassNotFoundException: org.reactivestreams.Publisher
  • Repetir acciones en estado con RxJava
  • No se puede 'observar en' hilo principal con RxKotlin
  • Confusión de la syntax de Kotlin lambda
  • Inyectar constructor y object complementario
  • Usando RxJava para unir datos locales con datos remotos (o en caching)
  • RxJava (Kotlin), Observable.amb y PublishSubject no están disparando
  • ¿Cómo leer JSON desde Url usando kotlin Android?
  • ¿Cómo escalar dinámicamente el rebote de la stream de emisión de ráfagas?
  • Crear nueva instancia de object Kotlin
  • Cómo notificar a Observable cuando finalice CountdownTimer