如何在密封的通用层次结构中定义对象?

ar-*_*r-g 3 kotlin

如何在密封的通用层次结构中定义对象?对象声明不适用于泛型.

sealed class PaginationViewState<T> {
    object LoadingFirstPage: PaginationViewState<T>()//doesn't work
    object LoadingPage: PaginationViewState<T>()//doesn't work

    data class DataLoaded<T>(val data: List<T>): PaginationViewState<T>()
    data class DataLoadedFromCache<T>(val data: List<T>): PaginationViewState<T>()
    data class Failure<T>(val e: Throwable): PaginationViewState<T>()
}
Run Code Online (Sandbox Code Playgroud)

hot*_*key 5

你不能这样做,因为a object是一个单例,它不能继承泛型类而不为类型参数提供具体类型.

您只能使用某种类型定义object替换T:

sealed class PaginationViewState<T> {
    object LoadingFirstPage: PaginationViewState<Any>()

    //...
}
Run Code Online (Sandbox Code Playgroud)

如果你想要的是能够使用对象来代替PaginationViewState<T>任何可能的 T,那么你可以使用泛型变化,与无论是class PaginationViewState<out T>object ...: PaginationViewState<Nothing>class PaginationViewState<in T>object ...: PaginationViewState<Any>(但限制的位置,其中T的类可以出现),或使用星- 您想要使用对象的投影:例如,使函数接受PaginationViewState<*>,然后T可以使用任何对象.