【问题标题】:Force Java to Scala explicit type casting on unknown java.util.Map type在未知的 java.util.Map 类型上强制 Java 到 Scala 显式类型转换
【发布时间】:2012-10-19 04:59:52
【问题描述】:

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

我使用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]

【问题讨论】:

  • import collection.JavaConverters; row.asInstanceOf[java.util.Map[String,Double]].asScala 工作吗?
  • import collection.JavaConverters._,不是@LuigiPlinge吗?
  • 我的类型不匹配,但它似乎是解决方案的开始! found : scala.collection.mutable.Map[String,Double] required: scala.collection.immutable.Map[String,Double]
  • 如果我添加这样的toMap 指令,row.asInstanceOf[java.util.Map[String,Double]].asScala.toMap,它可以工作,谢谢 :)

标签: java scala casting type-conversion scala-collections


【解决方案1】:

这对我有用

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

记得加入

import scala.collection.JavaConverters._

【讨论】:

    【解决方案2】:

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

    java.lang.ClassCastException: scala.collection.JavaConversions$JMapWrapper 无法转换为 scala.collection.immutable.Map

    我的解决方法是使用toMap:

    import collection.JavaConversions._
    
    ...
    
    val scalaMap = javaMap.toMap.asInstanceOf[String, Double]
    

    【讨论】:

      【解决方案3】:

      这个功能会解决你的问题:

      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]]
       }
      }
      

      【讨论】:

        猜你喜欢
        • 2010-09-15
        • 1970-01-01
        • 2011-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多