Android - Класс Kotlin Sealed с фильтром Rxkotlin - PullRequest
1 голос
/ 09 мая 2019

Поскольку запечатанный аналогичен объекту enum, поэтому я решил использовать запечатанный класс для ответа сети, если он содержит успех или неудачу, в случае успеха он содержит данные, иначе сообщение об ошибке
Пример * +1002 *

  sealed class Result {
            sealed class Success : Result() {
                data class F1(val data: Any) : Success()
                data class F2(val data: Any) : Success()
            }

            sealed class Error : Result() {
                data class F1(val error: Any) : Error()
                data class F2(val error: Any) : Error()
            }
        }

у приведенного выше класса Result есть либо Успех, либо Отказ

 getSomeDataFromService()
                .filter {
                    it is Result.Success.F1
                }
                .map { it: Result
                    /*
                    i face problem here,my need is F1 data class but what i
                     got is Result ,i know that i can cast here, 
                    but i am eager to know for any other solution other than casting  
                     */


                }

}

есть ли другое решение?
Любая помощь

1 Ответ

2 голосов
/ 09 мая 2019

Если getSomeDataFromService() возвращает Single, вы должны иметь возможность использовать Maybe.ofType () :

getSomeDataFromService()
    .toMaybe()
    .ofType(Result.Success.F1::class.java)
    .map {
        ...
    }

Если getSomeDataFromService() возвращает Observable,Вы можете использовать Observable.ofType() напрямую.

...