Если у меня есть java.util.Map[String,Java.util.Map]
для первого вызова, правильный перегруженный метод называется: toScala(java.util.Map[_,_])
. Но в вызове mapValues вызывается функция toScala(other:Any)
. Как этого избежать? Я бы назвал toScala с помощью java-объекта, такого как Map, List, Int, String. Карта может содержать другое значение java.util.Map/java.util.List/ String/Int
как одно из его значений. Точно так же список может также содержать другой java.util.List/ String/ Int
как своих членовScala Overloading Issue
private def toScala(map:java.util.Map[_,_]) : Any = {
map match {
case null => Map.empty
case _ => map.asScala.mapValues(toScala).toMap
}
}
private def toScala(list:java.util.List[_]) : Any = {
list match {
case null => List.empty
case _ => list.asScala.map(toScala).toList
}
}
private def toScala(other:Any) : Any = {
other match {
case null => None
case _ => other
}
}
Используйте соответствующие типы вместо масок и 'Any'. Я не уверен, что именно вы хотите сделать, но может быть решением для моделей. –
Но я не могу этого сделать, поскольку моя карта может содержать значения типов List, String, Int, Map и т. Д. Я пытаюсь создать ScalaAppconfigWrapper над JavaAppConfigWrapper – bugs
Пожалуйста, отредактируйте свой вопрос, чтобы показать нам, как вы вызываете код. То, что вы ожидаете, решит. –