@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
に表示され、戻り値の型には表示されません。
ここで疑問が生じます: Java インターフェイスから拡張されていない Scala コレクション ライブラリでも使用されるのはなぜですか?
trait GenericTraversableTemplate[+A, +CC[X] <: Traversable[X]] extends HasNewBuilder[A, CC[A] @uncheckedVariance]
この注釈の有効な用途は何ですか?