将Scala条件转换为Java谓词

时间:2019-05-05 09:36:48

标签: java scala

我正在使用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)

2 个答案:

答案 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)