Dav*_*ave 3 scala type-conversion scala-2.8
我正在尝试将项目从2.7转换为scala 2.8,并且我在与Java交互的代码中遇到了一些困难.下面是一个显示问题的稍微复杂的示例代码.基本上我有一个类型的成员变量的类mutable.Map[K,V]
,我找不到一种方法将其传递给期望a的方法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
Run Code Online (Sandbox Code Playgroud)
我不知道你为什么要重复转换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
}
Run Code Online (Sandbox Code Playgroud)
从控制台
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}
Run Code Online (Sandbox Code Playgroud)
易于解决:
class A[K : ClassManifest,V](m : collection.mutable.Map[K,V]) {
def asJava : java.util.Map[K,V] = m
}
Run Code Online (Sandbox Code Playgroud)
但是,如上所述,它引出了一个问题,即为什么你很难复制这个方法,你可以直接调用JavaConversions
它,甚至隐含地使用它.当然,您可能有充分的理由,或者您可能只是为了解决转换如何在Scala 2.7上运行.
归档时间: |
|
查看次数: |
2559 次 |
最近记录: |