当前位置: 首页 > 知识库问答 >
问题:

如何在静态编程语言和项目反应器中的Flux或Mono对象上内联函数映射

袁羽
2023-03-14

我试图开发一个演示应用程序使用静态编程语言和项目反应器,我想内联一些功能,如map对象,如FluxMono

我喜欢这样:

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.

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

德克萨斯州!

共有2个答案

鲁斯伯
2023-03-14

通常,您希望内联lambda函数,这些函数被传递到高阶函数中,因为这样可以减少运行时开销。在运行时内联lambda时,不会创建匿名类和函数引用对象。在您的例子中,内联并不能提高性能,因为它是一个常规函数。你可以在这里用例子阅读完整的解释

萧业
2023-03-14

只要您只是调用Java中定义的非内联map,就不会有任何好处。原则上,您可以查看Java定义,并将其转换为Kotlin,并使其成为您的内联映射的定义,但(无需检查)我希望它只是类似于返回新的MapFlux(…) 这可能也不会带来好处,因为lambda需要存储在字段中。

所以你需要重新实现Kotlin图书馆的相当一部分。

 类似资料:
  • 我知道内联函数可能会提高性能 编译器可以发出以下代码,而不是为参数创建函数对象并生成调用。(来源) 但是我发现没有kotlin为一个非内联函数创建的函数对象。为什么?

  • 我希望函数位于类中(不污染全局名称空间),但可以静态访问(从不创建它们所在的对象)。提议的解决办法: 这是一个好的解决方案,还是不可避免地会创建一个对象?我应该使用哪种图案?

  • 我有静态函数,它仅限于一些上下文(例如仅用于文档)。有两种替代方法可以将其定义为顶层函数或对象中的函数。 1. 2. 顶级函数的优点是它没有被包装在一个对象中,缺点是它可以从任何地方访问,没有类名前缀。这种情况有优点还是缺点或最佳实践?

  • 正如标题所说,我正在尝试将Java和Kotlin混合在一个项目中。这里有一个很好的例子。混合java kotlin hello world。除了kotlin在src/main/Java/somepackage/SomeClass中找不到我的任何Java类之外,所有的东西都正常工作。Java语言 这是什么原因? 我的身材。gradle看起来像这样 而不是开始尝试在更大的项目上实现这一点。我试图通过创

  • 我是一个初学静态编程语言的学生,正在学习一个示例回收人员视图。我开始编码,但没有得到我应该得到的结果,即使在检查和重新检查代码之后也是如此。然后我注意到,即使使用非常基本的代码,它仍然没有按照应有的方式运行。我将包含基本代码,当使用时,它应该显示一个通用列表。我只得到列表中的一项。我怀疑代码以外的其他东西正在影响结果;但是我还没有达到知道的水平。 请看活动内容。xml: 注意它有行。 下面是列表(

  • 我正在学习静态编程语言,我在函数方面有一些问题。我试图创建一个带有通用参数的函数接口。Java我会创建这样的东西: 然后我可以在其他地方像这样使用它(给定扩展: 你是怎么和Kotlin写这篇文章的? 我尝试的第一件事是使用如下类型别名: 但是,当我将绑定添加到type参数时,它停止了工作: 第二种方法是编写一个扩展函数类型的接口: 然而,现在我不知道如何用这个来实例化lambda函数。当我从中创建