Scala Фьючерсы и java 8 ЗавершенныеFuture

Введение CompletableFutures в Java 8 привело к языковым функциям, доступным в scala.concurrent.Future, таким как монадические преобразования.

  • Каковы различия и почему разработчик Scala должен предпочесть Scala Фьючерсы на java 8 CompletableFuture?

  • Есть ли веские причины использовать scala.concurrent.Future в Java через akka.dispatch мост?

Ответ 1

В чем отличия и почему разработчик Scala должен предпочесть Scala Фьючерсы над java 8 CompletableFuture?

Перефразируя то, что @dk14 указывало в комментариях, я бы сказал, что CompletableFuture не имеет идиоматического Scala api.

Для разработчика Scala последствия следующие:

  • Недостаточно понимания для факта, что он не соответствует Scala соглашениям о методах, обычным для монадических типов
  • java- scala накладные расходы interop, необходимые при использовании большой части его методов.

Также стоит отметить, что java CompletableFuture не совсем эквивалентен Scala Future. Это скорее плавкий предохранитель Scala Future и Promise.

Учитывая перечисленные выше недостатки, нет смысла использовать CompletableFuture в Scala, если вы не создаете публичный api, который должен быть легко совместим с java.

Есть ли еще веские причины использовать scala.concurrent.Future в Java через мост akka.dispatch?

Я особенно ищу причины использовать akka.dispatch в Java, если есть еще

Akka построен поверх Scala и иногда использует Scala Future s. Это означает, что в случаях, когда у вас есть часть кода, написанного в java, стоит обернуть его в Scala api (с akka.dispatch java api), чтобы иметь возможность легко использовать его с akka.

Например, вы реализуете аккера akka в java. При обработке сообщения вы хотите сделать неблокирующее чтение, которое, когда это будет сделано, должно давать результат в виде сообщения другому субъекту.

Что вы можете сделать, это поместить ваш ввод-вывод в java Callable, а затем использовать akka.dispatch. Futures # future, чтобы получить Scala Future, а затем вы можете использовать akka pipe, чтобы сделать результат будущего как сообщение для какого-то актера.