我正试图在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)
| 归档时间: |
|
| 查看次数: |
2175 次 |
| 最近记录: |