Автокаст запечатан, подкласс не проходит - почему?Rx Java 2 Наблюдаемый поток onErrorReturn - PullRequest
0 голосов
/ 17 декабря 2018

Я хочу закончить этот год с пониманием того, что не было ясно для моих частей этого года.

Мы используем подклассы запечатанных классов для обратной связи от нашей ViewModel к пользовательскому интерфейсу.

Итак, мы начнем с чего-то вроде:

sealed class LoginRoute {

    object LoginSuccessful : LoginRoute()

    object LoginFailed : LoginRoute()

    data class LoginError(val error: Throwable) : LoginRoute()
}

В нашей ViewModel у нас есть несколько потоков rxJava2, например:

override val loginServiceStatusStream: Observable<LoginRoute> =
        loginServiceStatus
            .map { status ->
                if (status == Status.OK) {
                    LoginSuccessful
                } else {
                    LoginFailed
                }
            }
            .onErrorReturn {
                LoginError(it)
            }

То, что мы на самом деле испытываем: вышепоказано, что Observable не компилируется, потому что, как только onErrorReturn добавлено, мы должны вручную добавить приведение к LoginRoute для каждого сопоставленного возвращаемого значения.

Как:

override val loginServiceStatusStream: Observable<LoginRoute> =
            loginServiceStatus
                .map { status ->
                    if (status == Status.OK) {
                        LoginSuccessful as LoginRoute
                    } else {
                        LoginFailed as LoginRoute
                    }
                }
                .onErrorReturn {
                    LoginError(it)
                }

Если мы просто сделаем это так ( без onErrorReturn), все будет работать без дополнительного оператора cast :

override val loginServiceStatusStream: Observable<LoginRoute> =
                loginServiceStatus
                    .map { status ->
                        if (status == Status.OK) {
                            LoginSuccessful
                        } else {
                            LoginFailed
                        }
                    }

Мне бы очень хотелось понять, почему этот состав необходим.
Любая помощь приветствуется.
Спасибо, счастливого Рождества и счастливого нового года :) 1031 *

...