我正在使用fabric8io Java库在Scala中使用Kubernetes。我想使用waitUntilCondition函数,该函数接收java.util.Predicate作为第一个参数。但是,在Scala中,谓词以不同的形式形成。我得到一个编译错误:
Type mismatch, expected: Predicate[Pod], actual: Nothing => Any
如何在Scala中定义此谓词? 这是我使用的代码:
client.pods()
.inNamespace("default")
.withName("app-driver")
.waitUntilCondition(condition => condition.getStatus().getPhase().equals("Running"), 15, TimeUnit.MINUTES)
答案 0 :(得分:4)
Scala 2.12似乎可以在我的机器上开箱即用地编译,但是在Scala 2.11中,我不得不使用@KrzysztofAtlasik建议的scala-java8-compat asJavaPredicate
(只是类型说明对我不起作用)
如果无法升级到Scala 2.12或导入scala-java8-compat,请尝试实例化Predicate[Pod]
并像这样覆盖test
方法
waitUntilCondition(
new Predicate[Pod] { def test(pod: Pod): Boolean = pod.getStatus.getPhase.equals("Running") },
15,
TimeUnit.MINUTES
)
答案 1 :(得分:3)
似乎编译器无法正确推断类型。也许只是尝试显式添加类型?
waitUntilCondition(pod: Pod => pod.getStatus().getPhase().equals("Running"), 15, TimeUnit.MINUTES)
您也可以尝试使用scala-java8-compat:
import scala.compat.java8.FunctionConverters._
waitUntilCondition(asJavaPredicate(pod => pod.getStatus().getPhase().equals("Running")), 15, TimeUnit.MINUTES)