1

私はJavaでNaturalComparatorクラス/オブジェクトを作成し、Scalaに書き直しました: https ://gist.github.com/319827#file_natural_comparator.scala

しかし、Scalaバージョンで@SuppressWarnings( "unchecked")を実行する必要がないのはなぜだろうか。(私はそれをコンパイルしfsc -deprecation -unchecked NaturalComparator.scalaます。)

  • Scalaは、変換がOKであることを認識するのに十分強力ですか?
  • Scalaコンパイルは、ジェネリックを使用しているときに自分が何をしているのかを知っていると想定してい.asInftanceOf[...]ますか?
4

1 に答える 1

4

Scalaは、自分が何をしているのかを知っていることを前提としています。この場合、あなたは自分が何をしているのかを知っています。なぜなら、反変としてマークされていなくても、それはあたかもそうであるかのように機能するからです(つまり、とComparator比較できれば、確かに特定のと比較できます)。AnyAnyTTT

何をしているのかわからない場合は、ランタイムエラーで壊れてしまいます。

一般に、次のような場合にパターンマッチングを使用します。

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

そして今、あなたは間違いなくチェックされていない警告を受け取ります:T消去されているので、マッチはあなたが思っていることをしません。

于 2011-02-26T18:41:47.593 に答える