2017-08-23 2 views
0

Ich baue meinen Code mit Kotlin.Java Lambda nach Kotlin

Ich habe auf ein Problem mit Lambda in Kotlin mit den folgenden gestolpert:

Java-Code:

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

Mit Instanziierung gemeinsame Schnittstelle

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

in Kotlin Mein Code

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

Es hat mir einen Syntaxfehler geben:

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.

Was könnte die korrekte Syntax sein?

+0

Versuchen Sie, das Lambda in Klammern einzuhüllen. –

Antwort

1

Sie müssen Kotlin Compiler ein wenig helfen und sagen, was ist der Typ dieses Lambda. Dieser Code sollte kompilieren und gut funktionieren:

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

Das funktioniert, danke! –

+0

Ich weiß;) Undertow - gute Wahl! : D –