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?

War es hilfreich?

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
scroll top