【问题标题】:How do I create an extension function in Kotlin, which operates on a class?如何在 Kotlin 中创建一个在类上运行的扩展函数?
【发布时间】:2025-12-06 05:00:02
【问题描述】:

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

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)

但它给了我编译器错误。

【问题讨论】:

  • 没有回答您的问题,但我发现以下功能更有用:inline fun&lt;reified T : Any&gt; mock() = Mockito.mock(T::class.java) 用法:val foo = mock&lt;Foo&gt;()。在许多情况下,由于类型推断,您甚至不必写出类型参数。
  • 看看这个不错的项目:github.com/nhaarman/mockito-kotlin

标签: java mockito kotlin kotlin-extension


【解决方案1】:

看起来你有点混淆了 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 是一个类。

【讨论】: