gpt4 book ai didi

Java Lambda 到 Kotlin

转载 作者:行者123 更新时间:2023-11-29 08:33:42 25 4
gpt4 key购买 nike

我正在使用 Kotlin 构建我的代码。

我在 Kotlin 中使用 Lambda 时偶然发现了以下问题:

Java代码:

  ((UndertowEmbeddedServletContainerFactory) container)
.addBuilderCustomizers(builder ->
builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true));

使用通用接口(interface)实例化

((UndertowEmbeddedServletContainerFactory) container)
.addBuilderCustomizers(new UndertowBuilderCustomizer() {
@Override
public void customize(Builder builder) {
builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true);
}
});

我在 Kotlin 中的代码

val c: UndertowEmbeddedServletContainerFactory = (container as UndertowEmbeddedServletContainerFactory)
// Calling the Lambda
c.addBuilderCustomizers{ (b: Builder) -> b.setServerOption(UndertowOptions.ENABLE_HTTP2, true) }

它给我一个语法错误:

Multiple markers at this line - Passing value as a vararg is only allowed inside a parenthesized argument list - Cannot infer a type for this parameter. Please specify it explicitly.

正确的语法是什么?

最佳答案

您需要稍微帮助 Kotlin 编译器并告诉它这个 lambda 的类型是什么。这段代码应该可以正常编译和工作:

        c.addBuilderCustomizers(UndertowBuilderCustomizer{ it.setServerOption(UndertowOptions.ENABLE_HTTP2, true)})

关于Java Lambda 到 Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45846506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com