代码之家  ›  专栏  ›  技术社区  ›  dtunctuncer

如何获取基类response<Iterable<User>>等泛型类的KClass

  •  1
  • dtunctuncer  · 技术社区  · 8 年前

    BaseResponse<Iterable<User>>::class
    

    我得到错误错误只允许类在类文本的左边。我已经搜索过了,但仍然没有找到如何在kotlin中获取泛型类的类型。

    1 回复  |  直到 8 年前
        1
  •  3
  •   zsmb13    8 年前

    你不能- KClass 只能描述班级 BaseResponse K类 使用的实例 BaseResponse::class .

    但是你所拥有的, BaseResponse<Iterable<User>> ,是一种具体类型,可以表示为 KType K型 例如,可以使用 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)))
    

    我选择使类型参数都不变,还有 KTypeProjection