2016-11-11 80 views
1

我看起来很奇怪。我不明白它是如何工作的。考虑下面的例子:为什么我一旦添加了导入导入就可以调用asJava scala.collection.JavaConverters._

val m = Map("s" -> "s") 
val jm : java.util.Map[String, String] = m.asJava // error 
import scala.collection.JavaConverters._ 
val jm : java.util.Map[String, String] = m.asJava //fine 

方法asJava实际上是在scala.collection.convert.Decorators::AsJava[A](op: => A)定义。我们如何在ScalaMap上调用它?

回答

4

有一个implicit conversion在这里。如果你看一下the code,你可以看到:

implicit def mapAsJavaMapConverter[A, B](m : Map[A, B]): AsJava[ju.Map[A, B]] = 
    new AsJava(mapAsJavaMap(m)) 

所以编译器通过上面的包裹你的Map,和上面会提供asJava()方法

相关问题