gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:19:37 26 4
gpt4 key购买 nike

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

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>()
}

最佳答案

你不能那样做,因为 object是单例,它不能在不为类型参数提供具体类型 的情况下继承泛型类。

你只能定义一个object替换 T有一些类型:

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

//...
}

如果您想要的是能够使用该对象代替 PaginationViewState<T> 任何可能 T , 然后你可以使用 generics variance , 与 class PaginationViewState<out T>object ...: PaginationViewState<Nothing>class PaginationViewState<in T>object ...: PaginationViewState<Any> (但这限制了 T 可以出现在类中的位置),或者在您想要使用对象的地方使用星投影:例如使函数接受 PaginationViewState<*> ,然后是一个带有任何 T 的对象可以使用。

关于kotlin - 如何在密封的通用层次结构中定义对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45614321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com