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

时间:2015-09-28 15:57:51

标签: kotlin

我正在尝试在Kotlin中模拟一个函数

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

并且它说“只允许类在类文字的左侧”。获取对静态已知参数化类的引用的正确方法是什么?现在我和一个丑陋的演员生活在一起

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

1 个答案:

答案 0 :(得分:17)

错误是正确的,您提供的解决方案是预期的解决方案。这里的基本原理是,由于泛型类型参数不会在运行时生成,因此您只能获取表示的对象,而不是类型

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

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

并像这样使用它:

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