我的UIState有一个密封的接口。
sealed interface UIState<out T> {
object ShowLoading : UIState<Nothing>
object ShowEmptyData : UIState<Nothing>
data class ShowData<out T>(val data: T) : UIState<T>
data class ShowError(val errorUIState: ErrorUIState) : UIState<Nothing>
}这对于我的应用程序中的大多数屏幕来说都是通用的,但是让我们假设我有一个搜索屏幕,并且除了这些状态,我还需要一个状态
object ShowNoSearchResult: UIState<Nothing>如果在UIState密封界面中添加此状态,则在所有屏幕中都需要处理此状态,但只需要在搜索屏幕中使用。作为一种解决方案,我尝试创建一个新的密封接口并扩展UIState。
sealed interface SearchUIState<out T>: UIState<T> {
object ShowNoSearchResult: SearchUIState<Nothing>
}现在的问题是,我不能使用我的UIState调用任何SearchUIState类。如果我使用ShowLoading、ShowEmptyData等,则无法使用SearchUIState。我想要的是使用SearchUIState来处理SearchUIState及其父状态的所有状态?有没有一种不重复代码的方法?
P.S.实际上,使用父密封接口,我也可以返回子密封接口状态。问题是,当我使用when**,处理父封接口状态时,它还需要处理所有子密封接口状态。
发布于 2022-05-16 18:55:11
您可以让每个UIState子程序也实现SearchUIState,并且可以将SearchUIState更改为不是UIState的子类型。
sealed interface UIState<out T> {
object ShowLoading : UIState<Nothing>, SearchUIState<Nothing>
object ShowEmptyData : UIState<Nothing>, SearchUIState<Nothing>
data class ShowData<out T>(val data: T) : UIState<T>, SearchUIState<T>
data class ShowError(val errorUIState: ErrorUIState) : UIState<Nothing>, SearchUIState<Nothing>
}
sealed interface SearchUIState<out T> {
object ShowNoSearchResult: SearchUIState<Nothing>
}https://stackoverflow.com/questions/72263159
复制相似问题