Ответ 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