scala type-safety

scala - ¿Por qué asInstanceOf no arroja ClassCastException?



type-safety (1)

¿Por qué asInstanceOf no arroja ClassCastException?

scala> List("a").asInstanceOf[List[Int]] res34: List[Int] = List(a)


Desde el scaladoc :

Tenga en cuenta que el éxito de un elenco en el tiempo de ejecución es la semántica de borrado del módulo Scala. Por lo tanto, la expresión 1.asInstanceOf [String] lanzará una ClassCastException en tiempo de ejecución, mientras que la expresión List (1) .asInstanceOf [List [String]] no lo hará. En el último ejemplo, dado que el argumento de tipo se borra como parte de la compilación, no es posible verificar si los contenidos de la lista son del tipo solicitado.

Si intenta acceder a la variable o mapear la conversión, corregty arroja una excepción:

scala> List("a").asInstanceOf[List[Int]] res0: List[Int] = List(a) scala> res0 res1: List[Int] = List(a) scala> res0(0) java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer List("a").map(_.asInstanceOf[Int]) java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer