如何从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"))
工作正常。此外,智能感知气泡确实将签名确认为如上所示(具有地图)。
然而Intellij抱怨道:
那么Scala相当于的是什么? extends Object
答案 0 :(得分:0)
需要将Map转换为java格式,如下所示:
import collection.JavaConversions._
val props = ConfigFactory.parseMap(mapAsJavaMap(SAMPLE_PROPS_MAP))
答案 1 :(得分:0)
问题不在上?扩展Object 类型边界声明,而不是Map定义。您拥有的签名是:
public static Config parseMap(**java.util.Map**<String, ? extends Object> values, String originDescription)
而你传递的是scala.collection.immutable.Map
您需要将scala地图转换为java地图,方法是“手动”创建Java地图或使用scala API中的工具:
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中的隐式方法是使用javaCollection.asScala
和scalaCollection.asJava
处理java-scala转换的推荐方法。另请注意,在Scala中,'常量'的约定是以资本开头的骆驼案例,例如CamelCase)