@uncheckedVariance
peuvent être utilisés pour combler le fossé entre la Scala de déclaration du site de la variance d'annotations et de Java est invariant génériques.
scala> import java.util.Comparator
import java.util.Comparator
scala> trait Foo[T] extends Comparator[T]
defined trait Foo
scala> trait Foo[-T] extends Comparator[T]
<console>:5: error: contravariant type T occurs in invariant position in type [-T]java.lang.Object with java.util.Comparator[T] of trait Foo
trait Foo[-T] extends Comparator[T]
^
scala> import annotation.unchecked._
import annotation.unchecked._
scala> trait Foo[-T] extends Comparator[T @uncheckedVariance]
defined trait Foo
Ceci dit que java.util.Comparateur est naturellement contre-variante, qui est le paramètre de type T
s'affiche dans les paramètres, et jamais dans un type de retour.
Cela pose la question: pourquoi est-il aussi utilisé dans le Scala collections de la bibliothèque, qui ne s'étend à partir d'interfaces Java?
trait GenericTraversableTemplate[+A, +CC[X] <: Traversable[X]] extends HasNewBuilder[A, CC[A] @uncheckedVariance]
Quelles sont les utilisations valides pour cette annotation?