为什么在添加import scala.collection.JavaConverters后可以调用asJava_

为什么在添加import scala.collection.JavaConverters后可以调用asJava_,scala,methods,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.

我觉得很奇怪。我不明白它是怎么工作的。考虑以下示例:

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的地图上调用它呢。如果您查看,您可以看到:

implicit def mapAsJavaMapConverter[A, B](m : Map[A, B]): AsJava[ju.Map[A, B]] =
    new AsJava(mapAsJavaMap(m))
因此,编译器正在通过上面的方法包装您的
映射,上面的方法将提供
asJava()
方法。如果您查看,您可以看到:

implicit def mapAsJavaMapConverter[A, B](m : Map[A, B]): AsJava[ju.Map[A, B]] =
    new AsJava(mapAsJavaMap(m))
因此,编译器通过上面的方法包装您的
Map
,上面的方法将提供
asJava()
方法