Wie komme ich bei Scala mit Typ-Löschen zurecht? Oder, warum kann ich den Typparameter meiner Sammlungen nicht erhalten?

Es ist eine traurige Tatsache des Lebens auf der Scala, wenn Sie instanziieren eine List[Int] können Sie überprüfen, ob Ihre Instanz ist eine Liste, und Sie können überprüfen, dass jedes einzelne element, es ist ein Int, aber nicht, dass es eine List[Int], wie man leicht verifiziert:

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?!

Den -nicht angekreuzte option legt die Schuld direkt auf type-erasure:

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 bekomme ich es?

InformationsquelleAutor der Frage Daniel C. Sobral | 2009-07-07

Schreibe einen Kommentar