【发布时间】:2026-01-20 20:30:01
【问题描述】:
如果我有一个java.util.Map[String,Java.util.Map] 用于第一次调用,则会调用正确的重载方法:toScala(java.util.Map[_,_])。但是在 mapValues 调用中,函数 toScala(other:Any) 被调用。如何避免这种情况?
我将使用 Map、List、Int、String 等 Java 对象调用 toScala。该映射可能包含另一个 java.util.Map/java.util.List/ String/Int 作为其值之一。同样,该列表还可能包含另一个 java.util.List/ String/ Int 作为其成员
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。我不确定您到底想做什么,但类型类可能是解决方案。 -
但我不能这样做,因为我的 Map 可能包含 List、String、Int、Map 等类型的值。我正在尝试在 JavaAppConfigWrapper 上构建一个 ScalaAppconfigWrapper
-
请编辑您的问题,向我们展示您是如何调用代码的。您希望清楚地解决什么问题。