Java Lambda到Kotlin
我正在用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) }
这给我一个语法错误:
在这一行有多个标记 – 只允许将值作为可变参数传递在括号内的参数列表中 – 不能推断出这个参数的类型。 请明确指定。
什么可能是正确的语法呢?
你需要帮助Kotlin编译器,告诉它这个lambda是什么类型的。 这段代码应该编译并工作得很好:
c.addBuilderCustomizers(UndertowBuilderCustomizer{ it.setServerOption(UndertowOptions.ENABLE_HTTP2, true)})