Scala autoboxing e Java Map
-
11-10-2019 - |
Domanda
Ho un metodo Java prende un argomento di tipo Map<Long, Foo>
. Sto cercando di scrivere un test unità per quel metodo in Scala 2.8.1 e passare un Map[Long, Foo]
letterale.
I miei sguardi codice come questo:
import collection.JavaConversions._
x.javaMethod(asJavaMap(Map(1L -> new Foo, 2L -> new Foo)))
Il compilatore è mi dà il seguente errore:
error: type mismatch;
found : scala.collection.immutable.Map[scala.Long,Foo]
required: scala.collection.Map[java.lang.Long,Foo]
Ho anche provato con
import collection.JavaConverters._
x.javaMethod(Map(1L -> new Foo, 2L -> new Foo))
e
import collection.JavaConversions._
x.javaMethod(Map(1L -> new Foo, 2L -> new Foo))
ed ha ottenuto l'errore:
error: type mismatch;
found : scala.collection.immutable.Map[scala.Long,Foo]
required: java.util.Map[java.lang.Long,Foo]
Come posso fare questo?
Soluzione
L'errore dice che Scala mappa con il tipo di chiave scala.Long
non può essere convertito in modo implicito mappa Java basata su java.lang.Long
:
found : scala.collection.immutable.Map[scala.Long,Foo]
required: scala.collection.Map[java.lang.Long,Foo]
Per risolvere il problema, si può specificare il tipo desiderato manualmente:
x.javaMethod(asJavaMap(Map((1:java.lang.Long) -> new Foo, (2:java.lang.Long) -> new Foo)))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow