我想延長一類具有mutable.HashMap的[]這樣的VAL:scala.collection.mutable中的HashMap是不變的,但不可變.HashMap是協變的,爲什麼?
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]()
}
,並得到一個錯誤:
Error:(19, 16) overriding value m in class C1 of type scala.collection.mutable.HashMap[Int,ScalaByExample.Father]; value m has incompatible type override val m = new mutable.HashMapInt, Son
我發現immutable.HashMap
是協變,但mutable.HashMap
是不變的。它適用於如果將mutable.HashMap
替換爲immutable.HashMap
。
所以我的兩個問題是:
我怎樣才能使作品使用mutable.HashMap?
scala的作者爲什麼要這樣設計HashMap?
我想你會發現所有的Scala集合都是如此:可變性影響類型的變化。可變集合上可用的操作使協方差不安全。 – jwvh