3

私は最近、いくつかのJavaコレクション(JavaFXをよく知っています)を使用しましたが、最近問題が発生しました(この他の問題の結果がここに掲載されています)。私が必要とするJavaFXインターフェースの1つは、Scalajava.util.Mapと同じように受け入れるだけです。Map[_,_]

を使用して変換を行いますが、計算後に、キャストをすべてのプログラムで使用する実際のScalaタイプセーフに強制的asInstanceOfに変換したい場合、どうすればよいですか?java.util.Map[_,_]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]
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のコードはコンパイルされますが、実行時例外が発生します。

java.lang.ClassCastException:scala.collection.JavaConversions$JMapWrapperをscala.collection.immutable.Mapにキャストできません

私の修正は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 に答える