为什么Scala的withDefaultValue方法会返回一个非特定的Map?

时间:2014-11-13 17:50:44

标签: scala hashmap

scala.collection.mutable.HashMap以这样一种方式继承withDefaultValue方法,即返回Map,而不是HashMap。这是为什么?我认为Scala类型系统足够聪明,可以在这种情况下推断出类型。 (类似地,x.map(y => ...)使用前面提到的聪明性返回与x相同类型的集合。)

我可以通过编写new HashMap[_S, T_] { override def default(x: _S_) = _d_ }来解决这个问题,但这会产生HashMap的子类,这可能会在其他上下文中引起问题。

也许有人可以让我相信MapHashMap更好,因为它更抽象。我假设scala.collection.mutable.Map实际上是HashMap实现的,但我怎么能确定?

1 个答案:

答案 0 :(得分:2)

因为返回的地图不是 a HashMap。它是scala.collection.immutable.Map.WithDefault,在scala.collection.immutable.Map中定义的私有类,不会继承HashMap

请参阅the source code of WithDefaultthe implementation of withDefaultValue