2017-10-07 4 views
1

Ich benutze Scala 2.12.2 und Java 8. Für eine wirklich bizarre Situation muss ich die Scala Futures in Java verwenden, und ich sehe, dass die Verwendung der Lambdas im zukünftigen Operator es nicht funktioniert .Lambda Ausdrücke in Scala Future

@Test 
public void test(){ 
    Future<String> future = new Promise.DefaultPromise(); 
    future.map(value -> value.toUpperCase()) 
      .onComplete(value -> System.out.println(value)); 
} 

Die Fehlermeldung sagte:

Future cannot be applied to lambda expression 

Aber nach der Dokumentation der scala Version 2.12 http://www.scala-lang.org/news/2.12.0/

ich, dass mit Scala API von jetzt an, Lambda-Ausdrücke aus Java8 gelesen und verstanden kompatibel waren .

Habe ich hier etwas missverstanden?

+1

Ich habe nie versucht Scala 'Future's von Java zu verwenden. Aber ich denke, es ist keine API, die aus Java verwendet werden soll. Z.B. Fast jede Methode benötigt einen ** impliziten ** 'ExecutionContext'. Java hat keine Implikationen. Java hat eigene 'Future's. –

+0

Nun, wir haben einen Schutz mit Scala + Java-Code, also müssen wir damit leben, dass Futures von Scala in Java-Umgebung sein wird. – paul

+0

Hallo Paul, DefaultPromise ist ein Implementierungsdetail, das nicht für den externen Gebrauch gedacht ist (wie man sieht, da es sowohl im impl-Paket als auch paketgeschützt ist). Haben Sie darüber nachgedacht: https://github.com/scala/scala-java8-compat –

Antwort

1

Das hier funktioniert

scala.concurrent.Future<String> f = scala.concurrent.Future.successful("abc"); 
scala.concurrent.Future<String> f2 = f.map(s -> s.toUpperCase(), scala.concurrent.ExecutionContext.global()); 
f2.foreach(s -> {System.out.println(s); return null;}, scala.concurrent.ExecutionContext.global()); 
+0

Mmmmm, was mache ich hier falsch ?. Ich habe IntelliJ mit dem SDK in meinem Projekt von Scala 2.12.2 und für das JDK Java 8. Es gibt noch etwas, das ich konfigurieren muss? – paul

+0

Ich weiß es nicht. Funktioniert mein Code nicht für dich? übrigens. Ich habe es nur mit Java 9 und Scala 2.12.3 getestet. – SpiderPig

+0

Verwenden Sie IntelliJ? – paul