Kotlin中参数化类的类字面语法
我试图嘲笑Kotlin的一个功能
Mockito.mock(Function2<Int, Int, Unit>::class.java)
它说: “只有类才允许在类文字的左边” 。 获得对静态已知参数化类的引用的正确方法是什么? 现在我生活在一个丑陋的演员
Mockito.mock(Function2::class.java) as (Int, Int) -> Unit
错误是正确的,你提供的解决方案是预期的。 这里的基本原理是,由于泛型类型参数在运行时没有被指定,所以只能获得表示类的对象,而不是类型 。
有一个解决方法:如果你通过一个指定的类型参数使用类字面值语法,用你想要的类型替换它,你将得到相同的KClass
对象,但是你提供了实际的参数。 在你的情况下,你可以声明以下函数:
inline fun <reified T : Any> mock(): T = Mockito.mock(T::class.java) as T
像这样使用它:
val f = mock<(Int, Int) -> Unit>()