我想从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,并没有什么大不了的,只是委托给定义前向和后向映射的两个内部映射,但在这种情况下我需要不变。 –