首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android -如何使密封类扩展其他密封类?

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

Stack Overflow用户
提问于 2022-05-16 17:17:55
回答 1查看 288关注 0票数 1

我的UIState有一个密封的接口。

代码语言:javascript
复制
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>
}

这对于我的应用程序中的大多数屏幕来说都是通用的,但是让我们假设我有一个搜索屏幕,并且除了这些状态,我还需要一个状态

代码语言:javascript
复制
object ShowNoSearchResult: UIState<Nothing>

如果在UIState密封界面中添加此状态,则在所有屏幕中都需要处理此状态,但只需要在搜索屏幕中使用。作为一种解决方案,我尝试创建一个新的密封接口并扩展UIState。

代码语言:javascript
复制
sealed interface SearchUIState<out T>: UIState<T> {
    object ShowNoSearchResult: SearchUIState<Nothing>
}

现在的问题是,我不能使用我的UIState调用任何SearchUIState类。如果我使用ShowLoadingShowEmptyData等,则无法使用SearchUIState。我想要的是使用SearchUIState来处理SearchUIState及其父状态的所有状态?有没有一种不重复代码的方法?

P.S.实际上,使用父密封接口,我也可以返回子密封接口状态。问题是,当我使用when**,处理父封接口状态时,它还需要处理所有子密封接口状态。

EN

回答 1

Stack Overflow用户

发布于 2022-05-16 18:55:11

您可以让每个UIState子程序也实现SearchUIState,并且可以将SearchUIState更改为不是UIState的子类型。

代码语言:javascript
复制
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>
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72263159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档