如何获取诸如BaseResponse <iterable <user >>之类的通用类的KClass

时间:2018-08-11 14:31:54

标签: kotlin

如果我尝试获得

GridLayout

我收到错误错误,只允许在类文字的左侧使用类。我已经搜索过,但仍然找不到如何在kotlin中获取泛型类的类型。

1 个答案:

答案 0 :(得分:2)

您不能-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中还有工厂方法可以根据需要创建协变或反变类型。