3

我最近使用了一些 Java 集合(众所周知的 JavaFX),但我最近遇到了一个问题(这里发布的另一个问题的结果)。我需要的 JavaFX 接口之一只接受java.util.Map,等于Map[_,_]在 Scala 中。

我使用 进行转换asInstanceOf,但是在计算之后,如果我想将我java.util.Map[_,_]的转换强制转换为Map[String,Double]我在所有程序中使用的真正的 Scala 类型安全,我该怎么做?

我尝试了各种java.conversions._方法asInstanceOf都没有成功。

//return a java.util.Map 
val row: java.util.Map[_,_] = c.getTableView().getItems().get(0)
//I need a Map[String,Double] in my program
val parameters = row.toMap[String,Double]
4

3 回答 3

6

这对我有用

val javaMap : java.util.Map[_, _] = null
val scalaMap = javaMap.asScala.toMap.asInstanceOf[Map[String, Double]]

记得包括

import scala.collection.JavaConverters._
于 2012-10-29T20:51:35.887 回答
1

@monkjack's code compiles, but it gives me a runtime exception:

java.lang.ClassCastException: scala.collection.JavaConversions$JMapWrapper cannot be cast to scala.collection.immutable.Map

My fix was to use toMap:

import collection.JavaConversions._

...

val scalaMap = javaMap.toMap.asInstanceOf[String, Double]
于 2013-05-10T21:18:50.517 回答
0

此功能将解决您的问题:

import collection.JavaConversions._

import scala.collection.immutable.Map

class Utility {

 def toScalaMap(javaMap: java.util.Map[String, Object]): Map[String, String] = {
   return javaMap.toMap.asInstanceOf[Map[String, String]]
 }
}
于 2015-08-22T07:18:42.510 回答