Wenn ich eine java.util.Map[String,Java.util.Map]
für den ersten Anruf habe, wird korrekt überladene Methode heißt: toScala(java.util.Map[_,_])
. Im Aufruf von mapValues wird jedoch die Funktion toScala(other:Any)
aufgerufen. Wie vermeide ich das? Ich würde zu Scala mit einem Java-Objekt wie Map, List, Int, String aufrufen. Die Karte kann einen anderen java.util.Map/java.util.List/ String/Int
als einen ihrer Werte enthalten. Ebenso kann die Liste auch eine andere java.util.List/ String/ Int
als Mitglieder enthaltenScala Overloading Problem
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
}
}
Verwenden Sie eine korrekte Typen statt Platzhalter und 'Irgendein'. Ich bin mir nicht sicher, was genau Sie tun möchten, aber typeclasses könnte die Lösung sein. –
Aber ich kann das nicht tun, da meine Map Werte der Typen List, String, Int, Map usw. enthalten könnte. Ich versuche ScalaAppconfigWrapper über JavaAppConfigWrapper zu erstellen. – bugs
Bitte bearbeiten Sie Ihre Frage, um uns zu zeigen, wie Sie den Code aufrufen. Was Sie erwarten, klar zu lösen. –