Scala Futures和java 8 CompletableFuture

Edm*_*984 17 java scala akka java-8

CompletableFuturesJava 8中的引入带来了scala.concurrent.Futuremonadic转换等语言功能.

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

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

Eug*_*Loy 17

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

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

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

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

值得注意的是,java CompletableFuture并不完全等同于scala Future.它相当于斯卡拉Future和斯卡拉的融合Promise.

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

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

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

Akka构建在scala之上,有时使用scala Future.这意味着如果你有一些用java编写的代码,有必要将它包装在scala api(使用akka.dispatchjava api)中,以便能够轻松地将它与akka一起使用.

例如,您正在java中实现akka actor.在处理消息时,您希望执行一些非阻塞读取,完成后,应将结果作为消息发送给另一个actor.

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