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?

Était-ce utile?

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