我想從Scala的不可變Map導出。它被定義爲這樣的:是否有可能改變Scala中基類/特徵的方差?
trait Map[A, +B]
不幸的是,我的實現需要是不變的B.我嘗試以下,但沒有成功:
def +(kv : (A, B)) : MyMap[A, B] = { ... }
override def +[B1 >: B](kv : (A, B1)) : MyMap[A, B1] =
throw new IllegalArgumentException()
也許有與@uncheckedVariance
一招?
也許你可以使用會員地圖,而不是派生? – Owen
另外,爲什麼它需要是不變的?我認爲(我不太瞭解斯卡拉),唯一需要不變的時候就是它既可以是源代碼也可以是接收器,但是映射是不可變的,因此它不可能是一個匯。 – Owen
我想實現一個雙向地圖。如果我實現Map,並沒有什麼大不了的,只是委託給定義前向和後向映射的兩個內部映射,但在這種情況下我需要不變。 –