从非 Java 背景到 Scala 给我带来了各种各样的困难,包括这个。
scala> class A
defined class A
scala> class B extends A
defined class B
scala> val a = new A
a: A = A@2e893a4a
scala> val b = new B
b: B = B@3a47c130
scala> a.asInstanceOf[B]
java.lang.ClassCastException: A cannot be cast to B
...
scala> b.asInstanceOf[A]
res1: A = B@3a47c130
我知道抛出 ClassCastException 是因为在运行时,a
它看起来不像是 B,但实际上它是(据我所知)。这里发生了什么?任何解决方法?谢谢。
编辑:JVM如何理解a
不能转换为B
?它会在 和 之间进行一些浅显的比较a.getClass
吗B
?
附言。我正在尝试将私有变量添加到库类,并覆盖接受库中定义的类作为参数的类方法之一(我试图将字段添加到的类)。