Android - 如何使密封类扩展其他密封类?

2024-05-29

我的 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(使用前将#替换为@)

Android - 如何使密封类扩展其他密封类? 的相关文章

随机推荐