【问题标题】:Unchecked generics warning in Scala?Scala中未经检查的泛型警告?
【发布时间】:2011-02-26 18:20:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: generics scala casting unchecked unchecked-conversion


    【解决方案1】:

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

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

    一般来说,在类似的情况下会使用模式匹配:

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

    现在您肯定会收到未经检查的警告:因为 T 已被删除,匹配并没有按照您的想法进行。

    【讨论】:

    • 我预计在这种情况下会出现编译时错误(如 Java 中的 x instanceof T)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多