Scala преобразования 2,8 неявным ява коллекции

голоса
3

Я пытаюсь преобразовать проект к Скале 2,8 с 2,7 и я столкнулся с некоторыми трудностями в коде , который взаимодействует с Java. Ниже немного запутанная часть образца кода , отображающий проблему. По существу , у меня есть класс с переменной - члена типа , mutable.Map[K,V]и я не могу найти способ , чтобы пройти через что к методу , который ожидает java.util.Map[K,V]. Любая помощь будет большой.

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
Задан 29/01/2010 в 11:25
источник пользователем
На других языках...                            


2 ответов

голоса
5

Я не знаю , почему вы пытаетесь повторить преобразование JavaConversions, но я думаю , что вы можете сделать это с добавлением неявного параметра maзапрашиваемым:

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
}

С консоли

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}
Ответил 29/01/2010 в 12:19
источник пользователем

голоса
5

Легко разрешима:

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

Хотя, как уже упоминалось, возникает вопрос, почему вы удосужившись повторить этот метод, который можно назвать непосредственно из JavaConversions, или даже использовать его в неявном виде . Вы можете иметь веские причины для этого, конечно, или вы могли бы сделать это просто обойти , как преобразования работали на Scala 2.7.

Ответил 29/01/2010 в 12:44
источник пользователем

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