Yan*_*san 16 scala type-safety
为什么asInstanceOf不会抛出ClassCastException?
scala> List("a").asInstanceOf[List[Int]]
res34: List[Int] = List(a)
Run Code Online (Sandbox Code Playgroud)
End*_*Neu 18
来自scaladoc:
请注意,演员在运行时的成功是以Scala的擦除语义为模.因此,表达式1.asInstanceOf [String]将在运行时抛出ClassCastException,而表达式List(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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1193 次 |
最近记录: |