Scala Autoboxing und Java Map
-
11-10-2019 - |
Frage
Ich habe eine Java-Methode verwendet ein Argument vom Typ Map<Long, Foo>
. Ich versuche, einen Komponententest für diese Methode in Scala 2.8.1 und übergeben im wörtlichen Map[Long, Foo]
schreiben zu können.
Mein Code sieht wie folgt aus:
import collection.JavaConversions._
x.javaMethod(asJavaMap(Map(1L -> new Foo, 2L -> new Foo)))
Der Compiler mir folgende Fehler geben:
error: type mismatch;
found : scala.collection.immutable.Map[scala.Long,Foo]
required: scala.collection.Map[java.lang.Long,Foo]
Ich versuchte es auch mit
import collection.JavaConverters._
x.javaMethod(Map(1L -> new Foo, 2L -> new Foo))
und
import collection.JavaConversions._
x.javaMethod(Map(1L -> new Foo, 2L -> new Foo))
und bekommen den Fehler:
error: type mismatch;
found : scala.collection.immutable.Map[scala.Long,Foo]
required: java.util.Map[java.lang.Long,Foo]
Wie kann ich das tun?
Lösung
Der Fehler besagt, dass Scala Karte mit scala.Long
Schlüsseltyp kann nicht implizit auf Java Karte umgewandelt wird basierend auf java.lang.Long
:
found : scala.collection.immutable.Map[scala.Long,Foo]
required: scala.collection.Map[java.lang.Long,Foo]
Als Abhilfe können, können Sie den gewünschten Typ manuell an:
x.javaMethod(asJavaMap(Map((1:java.lang.Long) -> new Foo, (2:java.lang.Long) -> new Foo)))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow