Scala中未经检查的泛型警告?

时间:2011-02-26 18:20:55

标签: generics scala casting unchecked unchecked-conversion

我用Java编写了一个NaturalComparator类/对象并将其重写为Scala: https://gist.github.com/319827#file_natural_comparator.scala

但是,我想知道为什么我不需要在Scala版本中使用@SuppressWarnings(“unchecked”)。 (我按fsc -deprecation -unchecked NaturalComparator.scala编译。)

  • Scala是否足够强大,可以识别转换是否正常?
  • 当我在.asInftanceOf[...]中使用泛型时,Scala编译是否认为我知道自己在做什么?

1 个答案:

答案 0 :(得分:4)

Scala假设您知道自己在做什么。在这种情况下,你知道你在做什么,因为即使Comparator没有被标记为逆变,它也就像它一样(即如果你可以比较Any使用Any,您肯定可以将TT进行比较,以获得特定的T

如果您不知道自己在做什么,它会因运行时错误而中断。

通常,人们会在类似的情况下使用模式匹配:

def cast[T](x: Any) = x match {
  case t: T => t
  case _ => throw new Exception
}

现在你确实得到了一个未经检查的警告:因为T被删除了,所以匹配不符合你的想法。