scala.collection.mutable.HashMap
以这样一种方式继承withDefaultValue
方法,即返回Map
,而不是HashMap
。这是为什么?我认为Scala类型系统足够聪明,可以在这种情况下推断出类型。 (类似地,x.map(y => ...)
使用前面提到的聪明性返回与x
相同类型的集合。)
我可以通过编写new HashMap[_S, T_] { override def default(x: _S_) = _d_ }
来解决这个问题,但这会产生HashMap
的子类,这可能会在其他上下文中引起问题。
也许有人可以让我相信Map
比HashMap
更好,因为它更抽象。我假设scala.collection.mutable.Map
实际上是HashMap
实现的,但我怎么能确定?
答案 0 :(得分:2)
因为返回的地图不是 a HashMap
。它是scala.collection.immutable.Map.WithDefault
,在scala.collection.immutable.Map
中定义的私有类,不会继承HashMap
。
请参阅the source code of WithDefault
和the implementation of withDefaultValue
。