Scala Futures和java 8 CompletableFuture

时间:2015-02-18 16:36:48

标签: java scala akka java-8

在Java 8中引入CompletableFutures带来了scala.concurrent.Future中可用的语言功能,例如monadic转换。

  • 有什么区别,为什么Scala开发人员更喜欢Scala Futures而不是java 8 CompletableFuture

  • 是否还有充分的理由通过scala.concurrent.Future桥在Java中使用akka.dispatch

1 个答案:

答案 0 :(得分:16)

  

有什么区别,为什么Scala开发人员更喜欢Scala Futures而不是java 8 CompletableFuture?

重述@ dk14在评论中指出的内容我会说CompletableFuture没有惯用的Scala api。

对于scala开发人员,其含义是:

  • 缺乏理解,因为它不遵循monadic类型常见的Scala方法约定
  • 使用大部分方法时需要的java-scala互操作开销

值得注意的是,java CompletableFuture并不完全等同于scala Future。它是scala FuturePromise的融合。

考虑到上面列出的缺点,在scala中使用CompletableFuture没有多大意义,除非您正在设计应该与java无缝互操作的公共API。

  

是否还有充分的理由通过akka.dispatch桥在Java中使用scala.concurrent.Future?

     

我特别想找到在Java中使用akka.dispatch的理由,如果还有

的话

Akka构建于scala之上,有时使用scala Future。这意味着如果你有一些用java编写的代码部分,那么将它包装在scala api中(使用akka.dispatch java api)是值得的,以便能够轻松地将它与akka一起使用。

例如,您正在java中实现akka actor。在处理消息时,你想做一些非阻塞读取,当完成后,应该将结果作为消息发送给另一个actor。

你可以做的是将你的I / O放入java Callable,然后使用akka.dispatch.Futures#future从中获取scala Future,然后你可以利用akka {{3将未来的结果作为消息传递给某个演员。