Tại sao asInstanceOf không ném ra một ClassCastException?Tại sao asInstanceOf không ném ClassCastException?
scala> List("a").asInstanceOf[List[Int]]
res34: List[Int] = List(a)
Tại sao asInstanceOf không ném ra một ClassCastException?Tại sao asInstanceOf không ném ClassCastException?
scala> List("a").asInstanceOf[List[Int]]
res34: List[Int] = List(a)
Từ scaladoc:
Lưu ý rằng sự thành công của một dàn diễn viên trong thời gian chạy là ngữ nghĩa tẩy xoá modulo Scala của. Do đó, biểu thức 1.asInstanceOf [String] sẽ ném ra một ClassCastException khi chạy, trong khi danh sách biểu thức (1) .asInstanceOf [List [String]] sẽ không. Trong ví dụ sau, vì đối số kiểu được xóa như một phần của trình biên dịch, không thể kiểm tra xem nội dung của danh sách có thuộc loại được yêu cầu hay không.
Nếu bạn cố gắng truy cập vào các biến hoặc bản đồ chuyển đổi nó correclty ném một ngoại lệ:
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
này là thú vị – tuxdna