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>()