【问题标题】:Java Lambda to KotlinJava Lambda 到 Kotlin
【发布时间】:2017-08-23 17:58:31
【问题描述】:

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

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

Java 代码:

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

使用通用接口实例化

((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) }

它给了我一个语法错误:

此行有多个标记 - 仅将值作为 vararg 传递 允许在带括号的参数列表中 - 无法推断类型 这个参数。请明确说明。

这可能是什么正确的语法?

【问题讨论】:

  • 尝试将 lambda 括在括号中。

标签: java lambda kotlin


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 2022-11-22
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多