2012-10-29 70 views
3

我最近与一些Java集合(众所周知的JavaFX)一起工作,并且最近出现了一个问题(这个问题的后果是here)。我需要的一个JavaFX接口只接受java.util.Map,等于在斯卡拉的Map[_,_]强制Java对Scala显式类型进行未知类型的转换类型

我就与asInstanceOf转换,但计算后,如果我想改变我java.util.Map[_,_]迫使浇铸成一个真正的Scala的类型安全Map[String,Double]我在我所有的程序中使用,我该怎么办呢?

我试过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] 
+0

是否'进口collection.JavaConverters ; row.asInstanceOf [java.util.Map [String,Double]]。asScala'工作? –

+0

import collection.JavaConverters._,是不是@LuigiPlinge? – pedrofurla

+0

我有一个类型不匹配,但它似乎是解决方案的开始! 'found:scala.collection.mutable.Map [String,Double] required:scala.collection.immutable.Map [String,Double]' – reyman64

回答

6

这对我的作品

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

请记住,包括

import scala.collection.JavaConverters._ 
1

@ monkjack的代码编译,但它给了我一个运行时异常:

的java.lang .ClassCastException:scala.collection.JavaConversions $ JMapWrapper cann OT被转换为scala.collection.immutable.Map

我的修复是使用toMap

import collection.JavaConversions._ 

... 

val scalaMap = javaMap.toMap.asInstanceOf[String, Double] 
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]] 
} 
} 
相关问题