我用Java编写了一个NaturalComparator类/对象并将其重写为Scala: https://gist.github.com/319827#file_natural_comparator.scala
但是,我想知道为什么我不需要在Scala版本中使用@SuppressWarnings(“unchecked”)。 (我按fsc -deprecation -unchecked NaturalComparator.scala
编译。)
.asInftanceOf[...]
中使用泛型时,Scala编译是否认为我知道自己在做什么?答案 0 :(得分:4)
Scala假设您知道自己在做什么。在这种情况下,你做知道你在做什么,因为即使Comparator
没有被标记为逆变,它也就像它一样(即如果你可以比较Any
使用Any
,您肯定可以将T
与T
进行比较,以获得特定的T
。
如果您不知道自己在做什么,它会因运行时错误而中断。
通常,人们会在类似的情况下使用模式匹配:
def cast[T](x: Any) = x match {
case t: T => t
case _ => throw new Exception
}
现在你确实得到了一个未经检查的警告:因为T
被删除了,所以匹配不符合你的想法。