如何解决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 举报,一经查实,本站将立刻删除。