2014-09-28 12 views

risposta

14

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 
+2

questo è interessante – tuxdna