Scala autoboxing et Java Plan
-
11-10-2019 - |
Question
J'ai une méthode Java prend un argument de type Map<Long, Foo>
. Je suis en train d'écrire un test unitaire pour cette méthode dans Scala 2.8.1 et passer dans un Map[Long, Foo]
littéral.
Mon apparence de code comme ceci:
import collection.JavaConversions._
x.javaMethod(asJavaMap(Map(1L -> new Foo, 2L -> new Foo)))
Le compilateur me donne l'erreur suivante:
error: type mismatch;
found : scala.collection.immutable.Map[scala.Long,Foo]
required: scala.collection.Map[java.lang.Long,Foo]
J'ai essayé aussi avec
import collection.JavaConverters._
x.javaMethod(Map(1L -> new Foo, 2L -> new Foo))
et
import collection.JavaConversions._
x.javaMethod(Map(1L -> new Foo, 2L -> new Foo))
et obtenu l'erreur:
error: type mismatch;
found : scala.collection.immutable.Map[scala.Long,Foo]
required: java.util.Map[java.lang.Long,Foo]
Comment puis-je faire?
La solution
L'erreur indique que la carte Scala avec le type de clé scala.Long
ne peut pas être converti implicitement à la carte Java basée sur java.lang.Long
:
found : scala.collection.immutable.Map[scala.Long,Foo]
required: scala.collection.Map[java.lang.Long,Foo]
Pour contourner ce problème, vous pouvez spécifier manuellement le type requis:
x.javaMethod(asJavaMap(Map((1:java.lang.Long) -> new Foo, (2:java.lang.Long) -> new Foo)))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow