我正在try 模拟Kotlin中的一个函数

Mockito.mock(Function2<Int, Int, Unit>::class.java)

上面写着"Only classes are allowed on the left hand side of a class literal".获取对静态已知的参数化类的引用的正确方式是什么?现在我和一群丑陋的演员生活在一起

Mockito.mock(Function2::class.java) as (Int, Int) -> Unit

推荐答案

错误是正确的,并且您提供的解决方案是预期的解决方案.这里的基本原理是,由于泛型类型参数在运行时不被实例化,因此您只能获得表示class的对象,而不能获得type.

不过,还有一个解决办法:如果您通过实例化的类型参数使用class文本语法,并在调用地点将其替换为所需的类型,您将获得相同的KClass个对象,但带有您提供的实际参数.在您的示例中,您可以声明以下函数:

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

And use it like this:

val f = mock<(Int, Int) -> Unit>()

Kotlin相关问答推荐

为什么try 在字符串列表上调用IterableInt.sum()失败,并抱怨无法转换为java.lang.Number?

如何使用收件箱文件中的类运行Kotlin应用程序

来自SnapshotFlow的单元测试StateFlow仅发出initialValue

Kotlin 函数名后面的大括号是什么意思?

扩展属性委托给实例属性

如何在 kotlin 中的数据类中为变量提供多种类型

kotlin 模式匹配如何像 scala 一样工作

为什么记得不将 StateFlow 转换为特定类型?

每个 Kotlin 版本的默认 Kotlin 语言版本是什么?

将子元素放在一个列表中

如何为 material.Slider 视图创建绑定适配器?

将 Gradle 子元素与 Kotlin 多平台一起使用

主机名不能为空

Kotlin惰性默认属性

launch 仅从 Kotlin 1.3 开始可用,不能在 Kotlin 1.2 中使用

在kotlin中,如何模拟封装回调函数?

如何在特定条件下清除jetpack数据存储数据

Kotlin:相互递归函数的尾部递归

@StringRes、@DrawableRes、@LayoutRes等android注释使用kotlin参数进行判断

Kotlin 是否支持部分应用程序?