Es ist eine traurige Tatsache in Scala, dass Sie, wenn Sie eine Liste [Int] instanziieren, überprüfen können, ob Ihre Instanz eine Liste ist, und Sie können überprüfen, ob jedes einzelne Element davon eine Int ist, aber nicht, dass es eine Liste ist [ Int], wie leicht zu überprüfen ist:
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 liegt die Schuld direkt beim Löschen des Typs:
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 komme ich darum herum?
scala 2.10.2
sah ich stattdessen diese Warnung: <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?") ^
Ich finde Ihre Frage und Antwort sehr hilfreich, bin mir aber nicht sicher, ob diese aktualisierte Warnung für die Leser nützlich ist.