Переход с Scala, не относящийся к Java, принес мне целый ряд трудностей, включая эту.
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
?
пс. Я пытаюсь добавить приватную переменную в класс библиотеки и переопределить один из методов класса, который принимает класс, определенный в библиотеке, в качестве аргумента (класс, к которому я пытаюсь добавить поле).