@uncheckedVariance
可用於彌合Scala的聲明網站方差註釋和Java不變泛型之間的差距。什麼時候在Scala中需要@uncheckedVariance,爲什麼它在GenericTraversableTemplate中使用?
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]
此註釋的有效用途是什麼?
大問題! – 2010-03-16 21:54:23