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

Yar*_*lav 17 kotlin

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

Mockito.mock(Function2<Int, Int, Unit>::class.java)
Run Code Online (Sandbox Code Playgroud)

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

Mockito.mock(Function2::class.java) as (Int, Int) -> Unit
Run Code Online (Sandbox Code Playgroud)

Ale*_*lov 18

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

但是有一个解决方法:如果你通过一个reified类型参数使用类文字语法,在调用站点用所需的类型替换它,你将得到相同的KClass对象,但是你提供的实际参数.在您的情况下,您可以声明以下功能:

inline fun <reified T : Any> mock(): T = Mockito.mock(T::class.java) as T
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

val f = mock<(Int, Int) -> Unit>()
Run Code Online (Sandbox Code Playgroud)