我有一個案例類:
case class AnomalyCheckConfigBuilder[S <: State[S]](anomalyDetectionStrategy: AnomalyDetectionStrategy,
analyzer: Analyzer[S, Metric[Double]],
anomalyCheckConfig: Option[AnomalyCheckConfig] = None)
我有一個函式,它以 Seq 的形式回傳上述案例類物件的集合。
val anomalyCheckConfig : Seq[AnomalyCheckConfigBuilder[_]] = jobConfig.validate.get.getAnomalyCheckConfigBuilder
我將上面串列中的物件添加到另一個簽名如下的方法中:
def addAnomalyCheck[S <: State[S]](
anomalyDetectionStrategy: AnomalyDetectionStrategy,
analyzer: Analyzer[S, Metric[Double]],
anomalyCheckConfig: Option[AnomalyCheckConfig] = None)
: this.type
我正在執行以下操作:
anomalyCheckConfig.foreach(x=>{
verificationSuite = verificationSuite.addAnomalyCheck(x.anomalyDetectionStrategy,x.analyzer,x.anomalyCheckConfig)
})
其中 verifySuite 是Deeque的開源代碼
我在上面的代碼中遇到的錯誤是:
error: inferred type arguments [_$1] do not conform to method addAnomalyCheck's type parameter bounds [S <: com.amazon.deequ.analyzers.State[S]]
[ERROR] verificationSuite = verificationSuite.addAnomalyCheck(x.anomalyDetectionStrategy,x.analyzer,x.anomalyCheckConfig)
error: type mismatch;
[ERROR] found : com.amazon.deequ.analyzers.Analyzer[_$1,com.amazon.deequ.metrics.Metric[Double]]
[ERROR] required: com.amazon.deequ.analyzers.Analyzer[S,com.amazon.deequ.metrics.Metric[Double]]
[ERROR] verificationSuite = verificationSuite.addAnomalyCheck(x.anomalyDetectionStrategy,x.analyzer,x.anomalyCheckConfig)
代碼在編譯時失敗,scala 無法理解狀態,我無法理解_$1來自哪里。希望對此有一些意見
uj5u.com熱心網友回復:
這清楚地表明 Scala 需要您提供一個實體,'S'該實體是類的子型別State。
你需要做的是:
anomalyCheckConfig.foreach(x=>{
verificationSuite = verificationSuite.addAnomalyCheck[S](x.anomalyDetectionStrategy, x.analyzer.asInstanceOf[Analyzer[S, Metric[Double]]], x.anomalyCheckConfig)
})
您還需要將其包裝在一個接受S為子型別的函式下State
def anmomaly[S <: State[S]](){
anomalyCheckConfig.foreach(x=>{
verificationSuite = verificationSuite.addAnomalyCheck[S](x.anomalyDetectionStrategy, x.analyzer.asInstanceOf[Analyzer[S, Metric[Double]]], x.anomalyCheckConfig)
})
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/437837.html
上一篇:Java泛型作為建構式引數
