我的 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
. The ShowLoading
, ShowEmptyData
等如果我使用则不可用SearchUIState
。
我想要的是使用SearchUIState
处理所有的状态SearchUIState
及其父州也是如此?有没有办法在不重复代码的情况下做到这一点?
附:实际上,使用父密封接口我也可以返回子密封接口状态。问题是,当我使用处理父密封接口状态时when
,它还需要处理所有子密封接口状态。
您可以使每个 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>
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)