Dlaczego asInstanceOf nie rzuca wyjątku ClassCastException?Dlaczego asInstanceOf nie rzuca wyjątku ClassCastException?
scala> List("a").asInstanceOf[List[Int]]
res34: List[Int] = List(a)
Dlaczego asInstanceOf nie rzuca wyjątku ClassCastException?Dlaczego asInstanceOf nie rzuca wyjątku ClassCastException?
scala> List("a").asInstanceOf[List[Int]]
res34: List[Int] = List(a)
Z scaladoc:
Należy pamiętać, że sukces gipsie w czasie wykonywania jest semantyka Erasure Modulo Scala. Dlatego wyrażenie 1.asInstanceOf [String] rzuci wyjątek ClassCastException w czasie wykonywania, podczas gdy wyrażenie List (1) .asInstanceOf [List [String]] nie będzie. W tym ostatnim przykładzie, ponieważ argument typu jest usuwany jako część kompilacji, nie można sprawdzić, czy zawartość listy jest żądanego typu.
przypadku próby uzyskania dostępu do zmiennej lub map konwersję to correclty zgłasza wyjątek:
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
ten jest interesujący – tuxdna