当前位置: 首页 > 知识库问答 >
问题:

如何获得类似BaseResponse的泛型类的KClass

卢杰
2023-03-14

如果我试图得到

BaseResponse<Iterable<User>>::class

我得到错误的错误只允许类的左边的类文字。我已经搜索,仍然没有找到如何获得泛型类的类型在Kotlin。

共有1个答案

陶腾
2023-03-14

您不能-KClass只能描述类BaseResponse,您可以使用BaseResponse::class获得一个KClass实例来完成此任务。

但是,baseResponse 是一个具体类型,您可以将其表示为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中还有工厂方法可以根据需要创建协变或逆变类型。

 类似资料:
  • 问题内容: 我有一个泛型类。在一种方法中,我想获取类型T的类实例,但是我不能调用。 使用它解决问题的首选方法是什么? 问题答案: 简短的答案是,无法找到Java中泛型类型参数的运行时类型。我建议阅读Java教程中有关类型擦除的章节以获取更多详细信息。 一个流行的解决方案是将type参数的传递给泛型类型的构造函数,例如

  • 问题内容: 我有一个泛型类。在一种方法中,我想获取的类实例,但我无法调用。 使用它解决问题的首选方法是什么? 问题答案: 简短的答案是,无法找到Java中泛型类型参数的运行时类型。我建议阅读Java教程中有关类型擦除的章节以获取更多详细信息。 一个流行的解决方案是Class将type参数的传递给泛型类型的构造函数,例如

  • 我需要能够在运行时告诉kotlin集合的泛型类型。我怎么做?

  • 问题内容: 在我的spring项目中,我的Dao类具有以下模板: 我的每个Dao类都具有以下结构: 这意味着当我调用方法findById,findByField,findAll时,我应该从Usuario,Usuario和List类型接收对象。 这两个拳头类的返回正确值,但最后一个不返回。当我运行此方法时(从我的服务类中): 我应该看到“ usuario”时收到“对象”作为响应。有人可以告诉我我在做

  • 如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或

  • 只能在类文本的左侧使用类 是否可以像在C#中那样对泛型参数提供类约束,或者是否可以使用其他语法来获取泛型参数的类型信息?