Ada*_*m K 16 java generics scala scala-collections
我在Scala和Java之间有编译问题.
我的Java代码需要一个
java.util.Map<Double, java.lang.Iterable<Foo>>
Run Code Online (Sandbox Code Playgroud)
我的scala代码有一个
Map[Double, Vector[Foo]]
Run Code Online (Sandbox Code Playgroud)
我收到编译错误:
error: type mismatch;
found : scala.collection.immutable.Map[scala.Double,Vector[Foo]
required: java.util.Map[java.lang.Double,java.lang.Iterable[Foo]]
Run Code Online (Sandbox Code Playgroud)
似乎scala.collection.JavaConversions不适用于嵌套集合,即使Vector可以被隐式转换为Iterable.没有迭代scala集合并手动进行转换,我可以做些什么来使类型工作?
scala.collection.JavaConversions应该弃用恕我直言.最好通过使用来明确转换发生的位置和时间scala.collection.JavaConverters.在你的情况下:
import scala.collection.JavaConverters._
type Foo = Int // Just to make it compile
val scalaMap = Map(1.0 -> Vector(1, 2)) // As an example
val javaMap = scalaMap.map {
case (d, v) => d -> v.toIterable.asJava
}.asJava
Run Code Online (Sandbox Code Playgroud)
小智 6
这更适合我的需求:
def toJava(m: Any): Any = {
import java.util
import scala.collection.JavaConverters._
m match {
case sm: Map[_, _] => sm.map(kv => (kv._1, toJava(kv._2))).asJava
case sl: Iterable[_] => new util.ArrayList(sl.map( toJava ).asJava.asInstanceOf[util.Collection[_]])
case _ => m
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1645 次 |
| 最近记录: |