如何在密封的通用层次结构中定义对象?对象声明不适用于泛型.
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)
你不能这样做,因为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可以使用任何对象.