【发布时间】:2019-01-18 21:42:18
【问题描述】:
如果我尝试得到
BaseResponse<Iterable<User>>::class
我得到错误错误只允许类文字左侧的类。我已经搜索过,但仍然没有找到如何在 kotlin 中获取泛型类的类型。
【问题讨论】:
标签: kotlin
如果我尝试得到
BaseResponse<Iterable<User>>::class
我得到错误错误只允许类文字左侧的类。我已经搜索过,但仍然没有找到如何在 kotlin 中获取泛型类的类型。
【问题讨论】:
标签: kotlin
你不能 -KClass 只能描述类 BaseResponse,你可以得到一个 KClass 实例,用 BaseResponse::class 来做这件事。
但是,BaseResponse<Iterable<User>>,您所拥有的是一个具体类型,您可以将其表示为 KType 实例。例如,可以使用createType 函数创建KType 实例。这看起来像这样:
// User
val userType = User::class.createType()
// Iterable<User>
val iterableOfUserType = Iterable::class.createType(arguments = listOf(KTypeProjection.invariant(userType)))
// BaseResponse<Iterable<User>>
val responseType = BaseResponse::class.createType(arguments = listOf(KTypeProjection.invariant(iterableOfUserType)))
我选择让类型参数保持不变,KTypeProjection 中还有工厂方法可以根据需要创建协变或逆变类型。
【讨论】:
Class<KType>。为了实现这一点,你可以做responseType.classifier as? KClass<BaseResponse<Iterable<User>>> (并处理未经检查的演员表)