Когда @uncheckedVariance требуется в Scala и почему он используется в GenericTraversableTemplate?

@uncheckedVariance может использоваться для преодоления разрыва между аннотациями на сайте объявлений Scala и инвариантными обобщениями Java.

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

Это говорит о том, что java.util.Comparator, естественно, противоположен, то есть параметр типаT появляется в параметрах и никогда в возвращаемом типе.

Возникает вопрос: почему он также используется в библиотеке коллекций Scala, которая не распространяется на интерфейсы Java?

trait GenericTraversableTemplate[+A, +CC[X] <: Traversable[X]] extends HasNewBuilder[A, CC[A] @uncheckedVariance]

Каковы действительные варианты использования этой аннотации?

Ответы на вопрос(3)

Ваш ответ на вопрос