Я пытаюсь написать свою собственную функцию расширения для RxKotlin, которая сделала бы Observable
дескриптором определенного типа ошибки (Throwable
подкласс) с обработчиком, который передается как аргумент и не испускает больше Предметы.RxKotlin: пытается добавить пользовательские ошибки ловли
Marble схема будет:
--- a --- b --- c --- error : T
[ handleError<T>(handler) ]
--- a --- b --- c --- finished
|
handler(error)
я написал следующее:
public inline fun <reified E : Throwable, R> Observable<R>.handleError(
crossinline handler: (E) -> Unit
) = onErrorResumeNext [email protected]{
[email protected] when (e) {
is E -> { handler(e); Observable.empty() }
else -> Observable.error(e)
}
}
Это работает хорошо, но использовать его я должен написать, например:
val myObservable: Observable<SomeClass> = ...
myObservable.handleError<IOException, SomeClass> { it.printStackTrace() }
^^^^^^^^^
Мне не нравится, что я должен написать общий номер Observable
в вызове handleError
, я бы хотел чтобы избежать этого.
Итак, существует ли способ избежать явного указания второго общего параметра?
Я полагаю, что компилятор не может сделать вывод, как только я укажу один из общих параметров. Но есть ли способ переписать handleErrors
для достижения того, чего я хочу?