2017-10-07 8 views
1

저는 Scala 2.12.2와 Java 8을 사용하고 있습니다. 정말 기괴한 상황에서 Java에서 Scala Futures를 사용해야하고, 미래 연산자에서 Lambdas를 사용하면 작동하지 않습니다. .Scala Future의 람다 식

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

오류 메시지가 말했다 :

Future cannot be applied to lambda expression 

그러나 이후

내가 지금부터, Java8에서 람다 표현식은 스칼라 API와 호환이라고 이해 2.12 http://www.scala-lang.org/news/2.12.0/

스칼라 버전의 문서를 읽어 .

여기에 내가 잘못 이해 했습니까?

+1

잘 작동합니다. 하지만 그것은 Java에서 사용하기위한 API가 아닌 것 같습니다. 예 : 거의 모든 메서드는 ** 암시 적 ** ExecutionContext를 필요로합니다. 자바는 함축되어 있지 않습니다. 자바는 자신의'미래'를 가지고있다. –

+0

우리는 Scala + Java 코드로 보호합니다. 따라서 Scala의 Futures가 Java 환경에있을 것이라는 사실에 따라 살아야합니다. – paul

+0

Hi Paul, DefaultPromise는 외부 사용을 목적으로하지 않는 구현 세부 사항입니다 (impl 패키지와 패키지로 보호되는 것으로 확인 됨). 이것을 사용 해본 적이 있습니까? https://github.com/scala/scala-java8-compat –

답변

1

이 여기에 내가 자바에서 스칼라`Future`s을 사용 해본 적이

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

음, 여기서 내가 잘못하고있는 것은 무엇입니까?. Scala 2.12.2 프로젝트와 JDK Java 8 SDK에 IntelliJ가 있습니다. 구성해야 할 다른 것이 있습니까? – paul

+0

잘 모르겠습니다. 내 코드가 효과가 없습니까? btw. Java 9와 Scala 2.12.3에서만 테스트했습니다. – SpiderPig

+0

IntelliJ를 사용하고 있습니까? – paul