gpt4 book ai didi

scala - 是否可以在 Scala 中更改基类/特征的方差?

转载 作者:行者123 更新时间:2023-12-04 15:26:19 25 4
gpt4 key购买 nike

我想从 Scala 的不可变 Map 派生。它是这样定义的:

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 有窍门?

最佳答案

问题是,如果你从一个不可变的映射中派生出一个不变的版本,你就会破坏类型安全。例如:

val dm = DiotMap(1 -> "abc")
val m: Map[Int, Any] = dm

这个声明是有效的,因为 Map是协变的。如果你的集合不能处理协方差,当我使用 m 会发生什么?

关于scala - 是否可以在 Scala 中更改基类/特征的方差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7097815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com