Método comodín de Kotlin

Tengo problemas para usar la function retryWhen en RxJava.

Cuando creo una function que se retryWhen a retryWhen en un Observable , no puedo llamar a la function zipWith . Parece que Kotlin está esperando algo que no puede ser lanzado aquí.

En este ejemplo, it.zipWith no funciona (algunos otros methods están disponibles, pero no este):

  val retryFunc = Func1<Observable<out Throwable>, Observable<Any>> { // zipWith is not possible to call it.zipWith<Int, Any>(Observable.range(1, 3), Func2<Throwable, Int, Any> { throwable, integer -> if (integer > 2) { return@Func2 Observable.error<Any>(Exception()) } Observable.timer(1, TimeUnit.SECONDS) }) } Observable.just("1", "2", "3").retryWhen(retryFunc) 

Si cambio los parameters entrantes a Func1<Observable<in Throwable> ... , la palabra key in permite usar la function zipWith . Pero después de haber cambiado, la llamada retryWhen(retryFunc) muestra un error:

No coinciden los types: Esperando que Throwable, encontrado en Throwable

  val retryFunc = Func1<Observable<in Throwable>, Observable<Any>> { it.zipWith<Int, Any>(Observable.range(1, 3), Func2<Throwable, Int, Any> { throwable, integer -> if (integer > 2) { return@Func2 Observable.error<Any>(Exception()) } Observable.timer(1, TimeUnit.SECONDS) }) } Observable.just("1", "2", "3").retryWhen(retryFunc) // type mismatch here, expected out, found in 

¿Alguien sabe cómo puedo recibir y producir el mismo tipo en Kotlin?

¿Ser capaz de crear el zipWith y devolver el valor esperado?