Почему asInstanceOf не бросает исключение ClassCastException?

Почему asInstanceOf не бросает исключение ClassCastException?

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

Ответы

Ответ 1

Из scaladoc:

Обратите внимание, что успех приведения во время выполнения по модулю Scala семантика стирания. Поэтому выражение 1.asInstanceOf [String] будет вызывать исключение ClassCastException во время выполнения, тогда как список выражений (1).asInstanceOf [List [String]] не будет. В последнем примере, поскольку аргумент типа удаляется как часть компиляции, невозможно проверить, является ли содержимое списка запрошенным типом.

Если вы попытаетесь получить доступ к переменной или отобразить преобразование, то она соответствует исключению:

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