Scala collezioni 2.8 implict java conversioni

voti
3

Sto cercando di convertire un progetto oltre a Scala 2,8 dal 2,7 e ho incontrato qualche difficoltà nel codice che interagisce con Java. Qui di seguito è un pezzo un po 'contorto di codice di esempio che visualizza il problema. Essenzialmente ho classe con una variabile membro di tipo mutable.Map[K,V]e non riesco a trovare un modo per passare passaggio a un metodo che prevede un java.util.Map[K,V]. Qualsiasi aiuto sarebbe grande.

scala> import scala.collection.JavaConversions._
import scala.collection.JavaConversions._

scala> class A[K,V](m : collection.mutable.Map[K,V]) { 
     | def asJava : java.util.Map[K,V] = m
     | }

<console>:9: error: could not find implicit value for parameter ma: scala.reflect.ClassManifest[K]
       def asJava : java.util.Map[K,V] = m
È pubblicato 29/01/2010 alle 11:25
fonte dall'utente
In altre lingue...                            


2 risposte

voti
5

Non so il motivo per cui si sta cercando di ripetere la conversione da JavaConversions, ma penso che si può fare con l'aggiunta del parametro implicito marichiesto:

import scala.collection.JavaConversions._
class A[K,V](m : collection.mutable.Map[K,V]) {
 def asJava(implicit ma:ClassManifest[K]) : java.util.Map[K,V] = m
}

dalla console

scala> import scala.collection.JavaConversions._
class A[K,V](m : collection.mutable.Map[K,V]) {
 def asJava(implicit ma:ClassManifest[K]) : java.util.Map[K,V] = m
}
import scala.collection.JavaConversions._

scala>
defined class A

scala> val map=scala.collection.mutable.HashMap[Int, Int]()
map: scala.collection.mutable.HashMap[Int,Int] = Map()

scala> map += 0->1
res3: map.type = Map(0 -> 1)

scala> val a=new A(map)
a: A[Int,Int] = A@761635

scala> a.asJava
res4: java.util.Map[Int,Int] = {0=1}
Risposto il 29/01/2010 a 12:19
fonte dall'utente

voti
5

Facilmente risolvibili:

class A[K : ClassManifest,V](m : collection.mutable.Map[K,V]) {
  def asJava : java.util.Map[K,V] = m
}

Anche se, come detto, si pone la domanda sul perché si sta preoccuparsi di replicare questo metodo, che si potrebbe chiamare direttamente da JavaConversions, o anche utilizzarlo in modo implicito. Si potrebbe avere buone ragioni per questo, naturalmente, o si potrebbe avere fatto solo per ottenere intorno a come conversioni lavorato Scala 2.7.

Risposto il 29/01/2010 a 12:44
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more