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

  • Cómo notificar a Observable cuando finalice CountdownTimer
  • Crear nueva instancia de object Kotlin
  • RxJava - ¿Entradas de keyboard de contrapresión?
  • Usando RxJava para unir datos locales con datos remotos (o en caching)
  • Obligatorio <Objeto> y encontrado <Objeto>?
  • RxKotlin - matriz de observadores dynamics
  • Obtiene N últimos objects emitidos por observables en RxJava2
  • ¿Cómo leer JSON desde Url usando kotlin Android?
  • Spring 5 and Kotlin 1.1 Coroutines: Type rx.Scheduler no presente
  • No se puede cambiar el text de ActionMenuItemView con RxKotlin
  • ¿Cómo especificar la versión de RxJava al usar RxKotlin?