如何在 Kotlin 和 Project Reactor 中的 Flux 或 Mono 对象上内联函数映射



我正在尝试使用 Kotlin 和 Project Reactor 开发一个演示应用程序,我想在FluxMono等对象上内联一些函数,例如map

我确实喜欢这个:

private inline fun Flux<Account>.map(noinline transformer: (Account) -> AccountDTO): Flux<AccountDTO> {
return this.map(transformer)
}

但这是不行的,因为我收到来自 IDEA 的以下警告:

Expected performance impact of inlining 'private open inline fun Flux<Account>.map(noinline transformer: (Account) -> AccountDTO): Flux<AccountDTO> defined in com.freesoft.reactiveaccountservice.api.controller.AccountController' is insignificant. Inlining works best for functions with parameters of functional types.

有没有人知道我如何实现这个内联函数,或者实现它是否重要?

咔嚓!

只要你只是调用Java中定义的非内联map,就不会有任何好处。原则上,您可以查看 Java 定义,并将其转换为 Kotlin,并将其作为内联map的定义,但是(不检查)我希望它只是类似于return new MapFlux(...)的东西,这可能不会受益,因为 lambda 需要存储在字段中。

因此,您需要在 Kotlin 中重新实现相当一部分库。

通常,您希望内联传递给高阶函数的lambda函数,因为它减少了运行时开销。在运行时内联 lambda 时,不会创建匿名类和函数引用对象。在您的情况下,内联不会提高性能,因为它是一个常规功能。您可以在此处阅读带有示例的完整说明

最新更新