выпуск параметров функции в Scala 11, работает в Scala 12 с использованием resilience4j - PullRequest
0 голосов
/ 26 февраля 2020

У меня был бы Scala вопрос. У меня есть следующий код при использовании библиотеки resilience4j. Код работает как шарм в Scala 12, но мой проект, клиентская библиотека, использует Scala -Кросс-компиляцию до Scala 11. При построении под Scala 11 я получаю следующую ошибку. У кого-нибудь есть идея, как это должно быть написано в Scala 11 для компиляции?

import io.github.resilience4j.retry.Retry
import java.util.function.{Supplier, Function => JavaFunction}
val supplier: Supplier[List[Endpoint]] = () => getEndpoints
val decoratedSupplier = Retry.decorateSupplier(retry, supplier)
val result = io.vavr.control.Try.ofSupplier(decoratedSupplier)
  .onSuccess { endpoints => endpoints }
    .onFailure { failure =>
      // handle failure
    }.get()

В Scala 11 я получаю следующие ошибки:

[Error] ServiceDiscoveryClient.scala:38: type mismatch;
 found   : () => List[Endpoint]
 required: java.util.function.Supplier[List[Endpoint]]
[Error] ServiceDiscoveryClient.scala:41: missing parameter type
[Error] ServiceDiscoveryClient.scala:97: type mismatch;
 found   : () => List[Endpoint]
 required: java.util.function.Supplier[List[Endpoint]]
four errors found

Есть идеи? Спасибо!

1 Ответ

2 голосов
/ 26 февраля 2020

В Scala 2.11 вам нужна опция компилятора -Xexperimental для поддержки передачи лямбда-выражений в виде типов SAM, таких как java.util.function.Supplier. В 2.12 он включен по умолчанию. Вы можете добавить эту опцию или добавить scala-java8-compat зависимость и

import scala.compat.java8.FunctionConverters._

...
val supplier: Supplier[List[Endpoint]] = (() => getEndpoints).asJava

(asJava может также потребоваться для лямбд, используемых в result).

...