Javaで次のクラスが定義されている場合
public class A
{
protected class B
{
}
protected void method(B b) {...}
}
そして、それをscalaで継承し、メソッドをオーバーライドしたいと考えています。私は次のことを望んでいたでしょう:
class C extends A {
override def method(b: B): Unit = {
// ... do something
super.method(b)
}
}
ただし、このようにすると、scala コンパイラは気に入らず、次のエラーが発生します。
メソッド メソッドは何もオーバーライドしません。注: クラス C のスーパークラスには、メソッドという名前の次の非最終メンバーが含まれています: protected[package ...] def method(x$1: A#B): Unit
私がそれを機能させる唯一の方法は、次のことを行うことです:
class C extends A {
override def method(b: A#B): Unit = {
// ... do something
super.method(b.asInstanceOf[this.B])
}
}
私はこれをしなければならないことを非常に醜く感じており、それを行うよりきちんとした方法があるかどうか疑問に思っていましたか?
ありがとう
デス