【发布时间】:2011-01-28 02:20:41
【问题描述】:
@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]
此注解的有效用途是什么?
【问题讨论】:
标签: scala scala-2.8 annotations unchecked variance