代码之家  ›  专栏  ›  技术社区  ›  Bhargav

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

  •  0
  • Bhargav  · 技术社区  · 7 年前

    假设我有一个这样的数据类

    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 不是内联的,这就是为什么我想要内联的能力),我如何让kotlin编译器内联lambda参数在模型类的调用站点?

    1 回复  |  直到 7 年前
        1
  •  3
  •   tynn    7 年前

    这是 可能的。作为你的财产 StubModel ,和 invocation 需要是一个对象实例,并作为对象实例存储。只是,什么 内联 功能是用来预防的。同时,使用列表作为参数使得无法内联任何内容,因为编译器应该如何知道 运行时 是的。