【发布时间】:2021-06-16 05:43:34
【问题描述】:
这可能是一个奇怪的问题,但我想知道是否有人对此有一些想法。 我正在开发一个我们希望与 Java、Groovy 和 Kotlin 兼容的 DSL。我正在将 Kotlin 兼容性添加到当前代码库中,尝试尽可能少地重复。除了使用 Java Consumer 功能接口用 Groovy 编写的一小段代码外,它运行良好:
PromptOptionals prompts(Consumer<PromptOptionals> definition) {
DefaultPromptOptionals promptOptionals = new DefaultPromptOptionals()
definition.accept(promptOptionals)
prompts = promptOptionals.prompts
promptOptionals
}
这个 prompts() 方法可以从 Java/Groovy 很好地调用,但是当我用 Kotlin 调用它时:
prompts {
say("test")
pause(10)
play("http://someserver.com/file")
}
3 个方法调用 say、pause 和 play 被添加到列表 promptOptionals.prompts 中,一切都按预期进行。但是对于 Kotlin,当定义.accept(promptOptionals) 被调用时,方法永远不会添加到列表中,返回的 promptOptionals 变量只是空的。 有什么方法可以让 Consumer 与 Kotlin lambda 兼容?
【问题讨论】:
标签: java kotlin groovy functional-programming dsl