Android-具有Rxkotlin过滤器的Kotlin Sealed类

时间:2019-05-09 06:38:55

标签: android kotlin rx-java rx-kotlin2

由于密封就像枚举对象一样,所以我决定使用密封类进行网络响应,如果成功则包含成功或失败,如果成功则包含数据,否则包含错误消息
例子

  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 个答案:

答案 0 :(得分:2)

假设getSomeDataFromService()返回一个Single,您应该可以使用Maybe.ofType()

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

如果getSomeDataFromService()返回Observable,则可以直接使用Observable.ofType()