加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Map和Set的实际类(不是抽象而不是特征)是什么?

发布时间:2020-12-16 18:06:16 所属栏目:安全 来源:网络整理
导读:在 Scala中,可以通过以下方式创建地图和集合文字: val m = Map(1-"a") 参考m和文字的类型都是Map [Int,String]. 但是,scala文档显示Map实际上是一个特征,需要实现抽象成员才能实例化: scala.collection.Map , scala.collection.immutable.Map , scala.coll
在 Scala中,可以通过以下方式创建地图和集合文字:

val m = Map(1->"a")

参考m和文字的类型都是Map [Int,String].

但是,scala文档显示Map实际上是一个特征,需要实现抽象成员才能实例化:
scala.collection.Map,
scala.collection.immutable.Map,
scala.collection.mutable.Map

所以我的问题是:文字地图所依据的实际具体类是什么?上述同样的问题也适用于Set.

解决方法

您可以使用getClass找到具体的运行时类:

scala> println(m.getClass)
class scala.collection.immutable.Map$Map1

所以它是Map1,一个在Map伴侣对象中定义的类.但是我们在稍大的地图上尝试相同的事情:

scala> val m2 = Map(1 -> "a",2 -> "b")
m2: scala.collection.immutable.Map[Int,String] = Map(1 -> a,2 -> b)

scala> println(m2.getClass)
class scala.collection.immutable.Map$Map2

这是一个不同的类.让我们尝试一个包含更多元素的地图:

scala> println((0 to 10).map(i => i -> i.toString).toMap.getClass)
class scala.collection.immutable.HashMap$HashTrieMap

这是另一堂课.

简而言之,您从Map(…)或toMap获取的具体运行时类是一个实现细节,绝大多数时候您不需要担心它(但是当您这样做时,可以使用getClass进行检查) ).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读