当函数具有带lambda参数的对象时,如何利用kotlin的内联好处

时间:2018-07-01 07:03:14

标签: lambda kotlin inline-functions

让我说我有一个像这样的数据类

private data class StubModel<T>(
        val invocation: ItemsFactory.() -> T?,
        val returnValue: T
)

我有一个像这样的功能

private fun <T> stubIt(stubs: List<StubModel<T>>) {
    for (stub in stubs) {
        whenever(stub.invocation()).thenReturn(stub.returnValue)
    }
}

现在,当我尝试内联stubIt函数时,我没有获得任何性能上的好处(即StubModel中的lambda参数未内联,这就是为什么我想要内联的强大功能),如何我如何让Kotlin编译器在调用站点的模型类中内联lambda参数?

1 个答案:

答案 0 :(得分:3)

不可能。作为StubModel的属性,invocation必须是一个对象实例,并以此进行存储。这就是 inline 函数旨在防止的。还有一个列表作为参数使得不可能内联任何东西,因为编译器应该如何知道 runtime 的值。