如果我试图得到
BaseResponse<Iterable<User>>::class
Run Code Online (Sandbox Code Playgroud)
我得到错误错误,类文字的左侧只允许类。我已经搜索过,但仍然没有找到如何在 kotlin 中获取泛型类的类型。
你不能 -KClass只能描述类BaseResponse,你可以得到一个KClass实例BaseResponse::class.
但是,您拥有的BaseResponse<Iterable<User>>是一个具体类型,您可以将其表示为一个KType实例。KType例如,可以使用createType函数创建实例。这看起来像这样:
// 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)))
Run Code Online (Sandbox Code Playgroud)
我选择使类型参数既是不变的,也有工厂方法KTypeProjection来创建协变或逆变类型,因为您需要它们。
| 归档时间: |
|
| 查看次数: |
2550 次 |
| 最近记录: |