[英]Calling into java wildcard generic method from Scala
如何從scala調用以下java方法?
public static Config parseMap(Map<String, ? extends Object> values,
String originDescription) {
我試圖按如下方式調用它:
val SAMPLE_PROPS_MAP : Map[String,AnyRef] = Map("hiveSaveFreq" -> new java.lang.Long(10L), "aggSeconds" -> new java.lang.Long(3))
val props = ConfigFactory.parseMap(SAMPLE_PROPS_MAP,"props"))
但是Intellij抱怨:
Cannot resolve symbol parseMap
為了確保這不是其他問題(例如,庫的版本不正確):
val props = ConfigFactory.parseMap(null,"props"))
工作正常。 同樣,智能提示氣泡會確認簽名如上所示(具有Map)。
但是Intellij抱怨:
那么,Scala等於什么? 擴展對象
Map需要轉換為java格式,如下所示:
import collection.JavaConversions._
val props = ConfigFactory.parseMap(mapAsJavaMap(SAMPLE_PROPS_MAP))
問題不在嗎? 擴展了對象類型的邊界聲明,但擴展了Map定義。 您擁有的簽名是: public static Config parseMap(**java.util.Map**<String, ? extends Object> values, String originDescription)
,您正在public static Config parseMap(**java.util.Map**<String, ? extends Object> values, String originDescription)
傳遞一個scala.collection.immutable.Map
您需要通過“手動”創建Java映射或使用scala API中的功能將scala映射轉換為Java映射:
import scala.collection.JavaConverters._
val SamplePropsMap : Map[String,AnyRef] = Map("hiveSaveFreq" -> new java.lang.Long(10L), "aggSeconds" -> new java.lang.Long(3))
val props = ConfigFactory.parseMap(SamplePropsMap.asJava,"props"))
(注意:JavaConverters中的隱式方法是推薦的處理java-scala轉換的方法,方法是使用javaCollection.asScala
和scalaCollection.asJava
。另外請注意,在Scala中,“常量”的約定是駝峰式,以大寫字母開頭例如CamelCase)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.