2011-02-26 63 views
0

我用Java编写的一个NaturalComparator类/对象,并改写成斯卡拉: https://gist.github.com/319827#file_natural_comparator.scala斯卡拉未经检查的泛型警告?

不过,我不知道为什么我不需要@SuppressWarnings(“未登记”)的斯卡拉版本。 (我编译它fsc -deprecation -unchecked NaturalComparator.scala。)

  • 斯卡拉是否足够强大,以识别转换是好的吗?
  • 斯卡拉编译是否假设我知道我在做什么,当我在.asInftanceOf[...]中使用泛型?

回答

4

斯卡拉假设你知道你在做什么。在这种情况下,你知道你在做什么,因为即使Comparator没有标记为逆变,它的作用就好像它是(也就是说,如果你可以比较AnyAny,你当然可以用T比较T某种特定T)。

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

一般情况下,人们会使用模式匹配在类似这样的情况:

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

,现在你肯定得到一个未经检查的警告:因为T被删除,对手也做你认为它。

+0

我希望在这种情况下编译时错误(如在Java中使用x instanceof T)。 – v6ak 2011-02-26 19:05:58