繁体   English   中英

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

[英]Android - How to make sealed class extend other sealed class?

我的 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>
}

现在的问题是我不能使用我的SearchUIState调用任何UIState类。 如果我使用SearchUIState ,则ShowLoadingShowEmptyData等不可用。 我想要的是使用SearchUIState来处理SearchUIState的所有状态及其父状态? 有没有办法在不重复代码的情况下做到这一点?

PS 实际上使用父密封接口我也可以返回子密封接口状态。 问题是,当我使用 when 处理父密封接口状态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>
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM