Es ist eine traurige Tatsache des Lebens auf Scala, dass, wenn Sie eine List[Int] instanziieren, können Sie überprüfen, dass Ihre Instanz eine Liste ist, und Sie können überprüfen, dass jedes einzelne Element davon ein Int ist, aber nicht, dass es eine List[Int] ist, wie leicht überprüft werden kann:
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?!
Mit der Option -unchecked wird die Schuld direkt auf das Löschen des Typs geschoben:
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?!
Warum ist das so, und wie kann ich das Problem umgehen?