簡體   English   中英

將Scala條件轉換為Java謂詞

[英]Convert Scala condition to Java predicate

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

Scala 2.12似乎在我的機器上開箱即用,但是在Scala 2.11中,我必須使用scala-java8-compat asJavaPredicateasJavaPredicate所建議的那樣(只是類型歸檔對我不起作用)。

如果升級到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
)

似乎編譯器無法正確推斷類型。 也許只是嘗試明確添加類型?

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM