为什么scala 2.11中有3种地图类型

时间:2015-05-18 15:14:07

标签: scala

我在scala中看到了3种地图类型:

scala.collection.Map
scala.collection.immutable.Map
scala.collection.mutable.Map

不变性与可变性非常有意义,并且看起来预先有一个map别名直接到immutable.Map。我不明白为什么有一个scala.collections.Map。

此外,看起来JavaConversions.mapAsJavaMap只接受scala.collections.Map而不是不可变的那个?

3 个答案:

答案 0 :(得分:3)

scala doc here提到了

A collection in package scala.collection.immutable is guaranteed to be immutable for everyone.
...
A collection in package scala.collection.mutable is known to have some operations that change the collection in place.
...
A collection in package scala.collection can be either mutable or immutable. 
Map中的

scala.collections.Map只是一个特征,或者是java中的接口。它为不可变和可变Map提供了通用API。如果不指定,scala默认为不可变实现。

修改

In addition it looks like JavaConversions.mapAsJavaMap only accepts a scala.collections.Map and not the immutable one?

不是真的。由于immutable.Mapmutable.Map都实现了特征MapmapAsJavaMap实际上并不关心map的具体实现。

这称为subtyping。正如维基页面所示,期望Bird的方法并不关心鸟的实例是duckostrich还是cuckoo

答案 1 :(得分:2)

这两种:

scala.collections.immutable.Map
scala.collections.mutable.Map

实现/扩展特征:

scala.collections.Map

您可以将其视为地图的通用界面。

答案 2 :(得分:1)

如果您查看en-USscala.collection.immutable.Map的文档,您会看到它们都扩展了scala.collection.mutable.Map特征,其中包含地图的常见操作,无论具体实现如何。但是,这只是一个特征,因此您无法启动它。

因此,scala.collection.Map。mapAsJavaMap方法接受地图的不可变和可变变体。