微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

scala-java集合之间的隐式转换如何工作?导入某些软件包怎么可能?

如何解决scala-java集合之间的隐式转换如何工作?导入某些软件包怎么可能?

import scala.collection.JavaConversions._
val j: java.util.Map[String,String] = Map("a" -> "b")
print (j)

它如何工作?换句话说,我很想知道导入某些库(此处为JavaConversions)如何有助于进行一些转换。毕竟,我没有调用任何转换函数
如何运作?

解决方法

您始终可以看到如何使用select t.* except (seqnum) from (select t.*,row_number() over (partition by uid order by last_updated desc) as seqnum from t ) t where seqnum = 1;

解析隐式
reify

因此,在导入import scala.jdk.CollectionConverters._ import scala.reflect.runtime.universe.reify println(reify{ Map("a" -> "b").asJava }.tree) //CollectionConverters.MapHasAsJava(Predef.Map.apply(Predef.ArrowAssoc("a").$minus$greater("b"))).asJava 行时带来了隐式

scala.jdk.CollectionConverters._

被转化为

val j: java.util.Map[String,String] = Map("a" -> "b").asJava

这种重写(隐式解析)是在编译时使用静态类型发生的,但是方法val j: java.util.Map[String,String] = CollectionConverters.MapHasAsJava(Map("a" -> "b")).asJava .MapHasAsJava(..)在运行时总是使用动态分派进行调用。

类似地,使用旧版本的Scala

.asJava

表示该行

import scala.collection.JavaConversions._

println(reify{
  val j: java.util.Map[String,String] = Map("a" -> "b")
}.tree)
//val j: Map[Predef.String,Predef.String] = JavaConversions.mapAsJavaMap(Predef.Map.apply(Predef.ArrowAssoc("a").$minus$greater("b")));

被转化为

val j: java.util.Map[String,String] = Map("a" -> "b")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。