我有一個想要在 Scala 中實作的 Java 介面。該介面包含以下方法宣告:
List<Map<String, Object>> xyz(Map<String, Object> var1, Map<String, Object> var2);
我的 Scala 實作是:
override def testComponent( input: java.util.Map[String, Object], metadata: java.util.Map[String, Object] )
{
val list: util.List[Map[String, AnyRef]] = new util.ArrayList[Map[String, AnyRef]]
return list
}
錯誤:覆寫型別 ITester 中的方法 xyz (x$1: java.util.Map[String,Object], x$2: java.util.Map[String,Object])java.util.List[java.util.Map [字串,物件]]; 方法 testComponent 具有不兼容的型別覆寫 def testComponent( input: java.util.Map[String, Object], metadata: java.util.Map[String, Object] )
我不知道具體是什么問題。
uj5u.com熱心網友回復:
您對testComponenthas 的定義是Unit因為它是使用(在最新版本的Scala 中已棄用)程序語法def name(args) { }(即 no = {)定義的。它首先通過編譯,因為 Scala 允許在Unit預期時丟棄一個值(該行為可以通過編譯器選項發出警告-Ywarn-value-discard)。您可以通過包含=.
override def testComponent(input: java.util.Map[String, Object], metadata: java.util.Map[String, Object]) = {
val list: util.List[Map[String, AnyRef]] = new util.ArrayList[Map[String, AnyRef]]
list // return should be avoided in Scala: it's not necessary and can introduce some really subtle bugs
}
明確說明公共方法的結果型別通常是個好主意。或者,這也應該有效:
override def testComponent(input: java.util.Map[String, Object], metadata: java.util.Map[String, Object]) =
new ArrayList[Map[String, AnyRef]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/369100.html
標籤:爪哇 斯卡拉 界面 Scala-java-互操作
上一篇:org.apache.spark.sql.AnalysisException:流式資料幀/資料集不支持非基于時間的視窗;;盡管有基于時間的視窗
