一旦我添加了import import scala.collection.JavaConverters._,为什么我可以调用asJava

时间:2016-11-11 12:55:04

标签: scala methods

这对我来说很奇怪。我不明白它是如何工作的。请考虑以下示例:

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)中定义的。我们如何在Scala的{​​{1}}上调用它?

1 个答案:

答案 0 :(得分: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()方法