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 のようには見えませんが、実際には (私が理解している限り) です。何が起きてる?回避策はありますか?ありがとう。
a
編集:JVMはキャストできないことをどのように理解していB
ますか? a.getClass
との間の浅い比較を実行しますB
か?
ps。ライブラリ クラスにプライベート変数を追加し、ライブラリで定義されたクラス (フィールドを追加しようとしているクラス) を引数として受け入れるクラス メソッドの 1 つをオーバーライドしようとしています。