Я строю свой код с Котлином.
Я наткнулся на проблему с использованием 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); } });
Мой код в Котлине
val c: UndertowEmbeddedServletContainerFactory = (container as UndertowEmbeddedServletContainerFactory) // Calling the Lambda c.addBuilderCustomizers{ (b: Builder) -> b.setServerOption(UndertowOptions.ENABLE_HTTP2, true) }
Это дает мне синтаксическую ошибку:
Несколько маркеров в этой строке. Передача значения в качестве vararg допускается только внутри списка аргументов в скобках. Нельзя вывести тип для этого параметра. Просьба указать его явно.
Какой может быть правильный синтаксис?
Вам нужно немного помочь компилятору Kotlin и сказать, какой тип этого лямбда. Этот код должен компилироваться и работать очень хорошо:
c.addBuilderCustomizers(UndertowBuilderCustomizer{ it.setServerOption(UndertowOptions.ENABLE_HTTP2, true)})