1

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

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

  • Scala 是否强大到足以识别转换是否正常?
  • Scala 编译是否假设我知道我在使用泛型时在做什么.asInftanceOf[...]
4

1 回答 1

4

Scala 假设您知道自己在做什么。在这种情况下,您确实知道自己在做什么,因为即使Comparator没有标记为逆变,它的行为就好像它是一样(即,如果您可以Any与比较Any,那么您当然可以TT某些特定的比较T)。

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

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

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

现在你肯定会得到一个未经检查的警告:因为T被删除了,所以比赛不会像你想象的那样做。

于 2011-02-26T18:41:47.593 回答