println("no match") } test(List(1,2)) //match test(List("foo","> println("no match") } test(List(1,2)) //match test(List("foo","> println("no match") } test(List(1,2)) //match test(List("foo"," />

Scala未確認の警告

可能重複:
  このScalaパターンのチェックされていない型引数についての警告一致しますか?

次のコードをコンパイルすると:

def test(x: Any) = x match {
   case List(1,2) => println("match")
   case _ => println("no match")
}

test(List(1,2))          //match
test(List("foo", "bar")) //no match

それは私に次のエラーを与える:

warning: there were 1 unchecked warnings; re-run with -unchecked for details
test: (x: Any)Unit

私は知っている(少なくとも私は思う)エラーの理由は、 unapplySeq がListの型パラメータをとり、その情報が実行時に消去されるため型を決定できないという事実によるものです。 List(1,2)の場合、 Int 型が推論され、 List.unapply [Int] (List 1,2))が抽出を行うために呼び出され、コンパイラはメソッドの Int 型パラメータが消去されていることを伝えています。

しかし、ここでは、リストに整数値1または2が含まれている場合にのみパターンが一致するため、パターンが消去されるかどうかは気にしません。したがって、文字列のリストが渡されても一致は起こりません。だから私はこの警告をどのように取り除くのですか?リストオブジェクトはここではリストクラスではなく呼び出されているので、私は[ List _ ] (1,2)型について気にしないで、 unapplySeq はコンパイラによって暗黙に呼び出されているので、私はそれを制御できません。たとえあったとしても、 List.unapplySeq [] (List(1,2))を使用して無制限の呼び出しを行うことはできませんでした。

Any から List _ ] にパラメータのタイプを変更して、この問題は解決しますが、同じメソッドで一致する他のタイプを追加したいので、[すべて]を選択します。

Javaは @SuppressWarnings({"unchecked"})を持っていますが、Scalaは @unmatched アノテーションを持っていますが、ケース。

私は何が欠けていますか?

1

答えはありません

0