如何在Kotlin中创建一个扩展函数,它在一个类上运行?

时间:2016-04-14 04:57:24

标签: java mockito kotlin kotlin-extension

想象一下,我有这行代码:

import org.mockito.Mockito
val mock = Mockito.mock(Sim2ParametersProvider::class.java)

我希望能够像这样写:

val mock = Sim2ParametersProvider::class.mock()

我该怎么做?

我试过

fun <T : kotlin.Any> kotlin.reflect.KClass<T>.mock() = Mockito.mock(this)

但它给了我编译错误。

1 个答案:

答案 0 :(得分:4)

看起来你正在轻微混淆KClass和java Class。以下编译为扩展java类:

fun <T> Class<T>.mock() = Mockito.mock(this)
val mock1 = FooClass::class.java.mock()

以下编译对我来说,扩展了Kotlin KClass:

fun <T: Any> KClass<T>.mock() = Mockito.mock(this.java)
val mock2 = FooClass::class.mock()

当然假设FooClass是一个类。