小编Jia*_*kun的帖子

scala.collection.mutable 中的 HashMap 是不变的,但 immutable.HashMap 是协变的,为什么?

我想用 mutable.HashMap[] 的 val 扩展一个类,如下所示:

class Father
class Son extends Father    

class C1{
  val m = new mutable.HashMap[Int, Father]() 
}

class C2 extends C1{
  override val m = new mutable.HashMap[Int, Son]()
}
Run Code Online (Sandbox Code Playgroud)

并得到一个错误:

错误:(19, 16) 覆盖类型为 scala.collection.mutable.HashMap[Int,ScalaByExample.Father] 的类 C1 中的值 m;值 m 具有不兼容的类型覆盖 val m = new mutable.HashMapInt, Son

我发现它immutable.HashMap是协变的,但它mutable.HashMap是不变的。如果替换mutable.HashMapimmutable.HashMap.

所以我的两个问题是:

  1. 如何使用 mutable.HashMap 使其工作?

  2. 为什么scala的作者要这样设计HashMap?

scala

5
推荐指数
1
解决办法
316
查看次数

标签 统计

scala ×1