Perché asInstanceOf non lancia ClassCastException?Perché asInstanceOf non lancia ClassCastException?
scala> List("a").asInstanceOf[List[Int]]
res34: List[Int] = List(a)
Perché asInstanceOf non lancia ClassCastException?Perché asInstanceOf non lancia ClassCastException?
scala> List("a").asInstanceOf[List[Int]]
res34: List[Int] = List(a)
Dal scaladoc:
Nota che il successo di un cast in fase di esecuzione è la semantica cancellazione modulo di Scala. Pertanto l'espressione 1.asInstanceOf [String] genererà una ClassCastException in fase di esecuzione, mentre l'espressione List (1) .asInstanceOf [List [String]] non lo farà. Nell'ultimo esempio, poiché l'argomento type viene cancellato come parte della compilazione, non è possibile verificare se il contenuto dell'elenco sia del tipo richiesto.
Se si tenta di accedere alla variabile o mappare la conversione viene generata un'eccezione correclty:
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
questo è interessante – tuxdna