为什么要通过@uV 禁用方差检查?

Mal*_*off 5 annotations scala type-safety

我刚绊倒方法的以下定义to由下式定义TraversableLike(2.10.0):

override def to[Col[_]](implicit cbf: CanBuildFrom[Nothing, A, Col[A @uV]]): Col[A @uV] = {
  val b = cbf()
  b.sizeHint(this)
  b ++= thisCollection
  b.result
}
Run Code Online (Sandbox Code Playgroud)

根据这个答案@uV禁用差异检查。这听起来很危险。我为什么要这样做?

小智 2

我想答案与这个问题的答案非常相似:When is @uncheckedVariance need in Scala, and Why is it use in GenericTraversableTemplate?

由于构建器(隐式参数cbf)针对不可变(可能协变)和可变(不变)集合而存在,因此此处可能使用注释来使该to方法适用于这两种类型的集合。