Печальный факт жизни в Scala заключается в том, что если вы создаете экземпляр List [Int], вы можете убедиться, что ваш экземпляр является списком, и вы можете проверить, что любой отдельный его элемент является Int, но не то, что это List [ Int], что легко проверить:
scala> List(1,2,3) match {
| case l : List[String] => println("A list of strings?!")
| case _ => println("Ok")
| }
warning: there were unchecked warnings; re-run with -unchecked for details
A list of strings?!
Опция -unchecked прямо обвиняет в стирании типов:
scala> List(1,2,3) match {
| case l : List[String] => println("A list of strings?!")
| case _ => println("Ok")
| }
<console>:6: warning: non variable type-argument String in type pattern is unchecked since it is eliminated by erasure
case l : List[String] => println("A list of strings?!")
^
A list of strings?!
Почему это так, и как мне обойти это?
scala 2.10.2
я увидел это предупреждение: <console>:9: warning: fruitless type test: a value of type List[Int] cannot also be a List[String] (but still might match its erasure) case list: List[String] => println("a list of strings?") ^
я считаю, что ваш вопрос и ответ очень полезны, но я не уверен, что это обновленное предупреждение полезно для читателей.