Intereting Posts
Преобразование кода Python в Kotlin UnsupportedOperationException Команда «android» больше не включена в SDK Расширение Котлина для следующего значения Enum без отражения Как определить, является ли объект унаследованным от определенного класса в Котлине? правильное поведение сопрограмм? Приложение Spring Boot: наблюдатель файловой системы для многих путей Kotlin – Идиоматический способ удаления повторяющихся строк из массива? Почему unregisterReceiver () никогда не вызывает onServiceDisconnected? Как решить: Ошибка: выполнение выполнено для задачи ': app: kaptDebugKotlin'? Не удалось проанализировать: org.jetbrains.kotlin.kapt3.diagnostic.KaptError: ошибка при обработке аннотации Kotlin – извлечение списка родительских объектов предметов в коллекции Передача собственности другому имуществу Войти в firebase в студии kotlin android не удалось настроить Kotlin Компиляция приложения Kotlin Android не удалась с сообщением: Неразрешенная ссылка: kotlinx

Метод подстановки Котлина

У меня возникли проблемы с использованием функции retryWhen в RxJava.

Когда я создаю функцию, которая будет передана для retryWhen в Observable , я не могу вызвать функцию zipWith . Кажется, что Котлин ожидает чего-то, чего нельзя отнести здесь.

В этом примере it.zipWith не работает (доступны некоторые другие методы, но не этот):

  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) 

Если я изменяю входящие параметры на Func1<Observable<in Throwable> ... , ключевое слово in позволяет использовать функцию zipWith . Но после того, как я изменился, retryWhen(retryFunc) вызова. retryWhen(retryFunc) показывает ошибку:

Несоответствие типов: Ожидание Throwable, найдено в 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 

Кто-нибудь знает, как я могу получить и произвести тот же тип в Котлине?

Уметь создать zipWith и вернуть ожидаемое значение?

Solutions Collecting From Web of "Метод подстановки Котлина"