私が使用しているJavaライブラリクラスは宣言します
protected getPage(): Page { ... }
今度は、ヘルパー Scala mixin を作成して、よく使用する機能を追加したいと考えています。Java クラスにはさまざまな場所で拡張したいさまざまなサブクラスがあるため、クラスを拡張したくありません。問題はgetPage()
、 mixintrait
で使用すると、次のエラーが発生することです。
実装上の制限: トレイトは、具体的なトレイト メソッド内の
MyMixin
保護されたメソッドにアクセスします。getPage
サブクラスに影響を与えずに機能させる方法はありますか? そして、なぜこの制限があるのですか?
これまでのところ、回避策を考え出しました: トレイトのメソッドを次のようにオーバーライドします。
override def getPage(): Page = super.getPage();
これはうまくいくようですが、私は完全に満足していません。幸いなことgetPage()
に、サブクラスでオーバーライドする必要はありませんが、必要に応じて、同じメソッドの 2 つのオーバーライドを取得し、この回避策は機能しません。