Почему asInstanceOf не бросает исключение ClassCastException?Почему asInstanceOf не бросает ClassCastException?
scala> List("a").asInstanceOf[List[Int]]
res34: List[Int] = List(a)
Почему asInstanceOf не бросает исключение ClassCastException?Почему asInstanceOf не бросает ClassCastException?
scala> List("a").asInstanceOf[List[Int]]
res34: List[Int] = List(a)
От scaladoc:
Обратите внимание, что успех гипса во время выполнения стирания семантики по модулю в Scala. Поэтому выражение 1.asInstanceOf [String] будет вызывать исключение ClassCastException во время выполнения, тогда как список выражений (1) .asInstanceOf [List [String]] не будет. В последнем примере, поскольку аргумент типа удаляется как часть компиляции, невозможно проверить, является ли содержимое списка запрошенным типом.
При попытке доступа к переменной или отобразить преобразование его 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
это интересно – tuxdna