我有一个像这样的scala方法:
import collection.JavaConversions._
def foo(message: Map[String, Any]) {
// message is implicitly converted to Java format
someJavaApi.method1(message)
message.get("mapField") match {
case Some(mapField) =>
val stringValue = mapField.asInstanceOf[Map[String, String]].get("internalField")
otherJavaApi.method(stringValue)
case None => /* do something */
}
}
其中 message 是一个结构如下的地图:
Map(
"field" -> "value",
"mapField"-> Map("internalField"->"someValue")
)
从上面的代码可以明显看出,我有兴趣从“mapField”字典对象的“internalField”中提取“someValue”
但是我在运行时不断收到错误消息,例如:
scala.collection.JavaConversions$JMapWrapper cannot be cast to scala.collection.immutable.Map
我觉得这是由于在调用第一个 java 库 API 时从 scala 到 java 集合的隐式转换,但我不确定,我想就如何改进从“mapField”,以更具功能性或 Scala 风格的方式并避免异常。
我正在使用 scala 2.9.2 版本。