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?

È stato utile?

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