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

前端之家收集整理的这篇文章主要介绍了scala – Map和Set的实际类(不是抽象而不是特征)是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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进行检查) ).

猜你在找的Scala相关文章