gpt4 book ai didi

java - Scala 11 中的函数参数问题,可使用resilience4j 在 Scala 12 中工作

转载 作者:行者123 更新时间:2023-12-02 01:03:07 24 4
gpt4 key购买 nike

我有一个 Scala 问题。我在使用resilience4j库时有以下代码。该代码在 Scala 12 中工作起来就像一个魅力,但我的项目(客户端库)也使用 Scala-Cross 编译到 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

有什么想法吗?谢谢!

最佳答案

在 Scala 2.11 中,您需要 -Xexperimental 编译器选项来支持将 lambda 作为 SAM 类型传递,例如 java.util.function.Supplier。在 2.12 中它是默认启用的。您可以添加此选项,或添加 scala-java8-compat依赖性和

import scala.compat.java8.FunctionConverters._

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

(result 中使用的 lambda 也可能需要 asJava)。

关于java - Scala 11 中的函数参数问题,可使用resilience4j 在 Scala 12 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60410759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com