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

Kotlin中参数化类的类文字语法

吴展
2023-03-14
Mockito.mock(Function2<Int, Int, Unit>::class.java)
Mockito.mock(Function2::class.java) as (Int, Int) -> Unit

共有1个答案

西门安歌
2023-03-14

错误是正确的,您提供的解决方案是预期的。这里的基本原理是,由于泛型类型参数在运行时没有被具体化,所以您只能获得一个表示类的对象,而不是类型。

但是有一个解决方法:如果您通过一个具体化的类型参数使用类的文字语法,并在调用站点用所需的类型替换它,您将得到相同的Kclass对象,但具有您提供的实际参数。在您的情况下,可以声明以下函数

inline fun <reified T : Any> mock(): T = Mockito.mock(T::class.java) as T

并像这样使用它:

val f = mock<(Int, Int) -> Unit>()
 类似资料:
  • 我有一个抽象超类和两个非抽象子类和。如何在超类方法中定义类型,如下所示 我允许在子类方法中编写具体类型(例如,或) 在上面的示例中,子类方法不会覆盖超类方法。

  • 我遇到了一个奇怪的行为,在类型为“具体化”的函数中使用Gson进行反序列化。仅当类型参数中涉及接口时才会发生这种情况。 采用以下代码: 第4行使用自定义扩展函数Gson。fromJson(json:String):T。 如果定义为具体化,则失败: 如果它被定义为普通类型参数,它就可以工作: (注意,使具体化在这里没有意义,只是想了解它在特殊用例中的影响) 使用具体化时的异常如下所示:

  • 我有一个项目与android应用程序从wordpress rest api获取帖子,我采取的一些字段是这样的列表。 Wordpress API-如何在Android/Java中遍历对象的JSON数组 Android Kotlin解析嵌套JSON 将Json解析为原始数组Kotlin https://medium.com/@gilesjeremydev/room-through-a-complete

  • 我是新手。我想在Person类驱动的Employee类中添加age参数。我怎么能在科特林做到?! 我的错误是这样的: 为什么不能在员工构造函数中使用var或val?!我犯了什么错误?

  • 我面临泛型的问题。 下面是我使用泛型的一个类: 在这里,我们的类:使用进行参数化。 我想在我们的一种方法中指定类型,如下所示: 但是,我遇到以下编译器错误:

  • 有没有方法用子类的静态成员类参数化超类? exampleSuperClass.java: 编译失败,错误为: 或者与: 成员不能解析为类型 如果用另一个包保护的顶级类来参数化ExampleSubClass,它工作得很好(也就是没有错误)。 这背后的驱动力是我有一个泛型超类和许多不同的和对。但是由于只被引用,最好是: 限制的访问,使其成为静态成员类和 通过不给自己的文件来减少文件数。 那么,在参数化