我正在尝试在Kotlin中模拟一个函数
Mockito.mock(Function2<Int, Int, Unit>::class.java)
并且它说“只允许类在类文字的左侧”。获取对静态已知参数化类的引用的正确方法是什么?现在我和一个丑陋的演员生活在一起
Mockito.mock(Function2::class.java) as (Int, Int) -> Unit
答案 0 :(得分:17)
错误是正确的,您提供的解决方案是预期的解决方案。这里的基本原理是,由于泛型类型参数不会在运行时生成,因此您只能获取表示类的对象,而不是类型。
虽然有一种解决方法:如果你通过一个具体化的类型参数使用类文字语法,在调用网站上用所需类型替换它,你将获得相同的KClass
对象但是根据您提供的实际论点。在您的情况下,您可以声明以下函数:
inline fun <reified T : Any> mock(): T = Mockito.mock(T::class.java) as T
并像这样使用它:
val f = mock<(Int, Int) -> Unit>()