在
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进行检查) ).