Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why asInstanceOf doesn't throw a ClassCastException?

Why asInstanceOf doesn't throw a ClassCastException ?

scala> List("a").asInstanceOf[List[Int]]
res34: List[Int] = List(a)
like image 799
Yann Moisan Avatar asked Sep 28 '14 20:09

Yann Moisan


1 Answers

From the scaladoc:

Note that the success of a cast at runtime is modulo Scala's erasure semantics. Therefore the expression 1.asInstanceOf[String] will throw a ClassCastException at runtime, while the expression List(1).asInstanceOf[List[String]] will not. In the latter example, because the type argument is erased as part of compilation it is not possible to check whether the contents of the list are of the requested type.

If you try to access the variable or map the conversion it correclty throws an exception:

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
like image 104
Ende Neu Avatar answered Nov 06 '22 02:11

Ende Neu