8

ここには、いくつかの Java クラスを含むライブラリがあります。1 つのクラスにはいくつかのprotected staticメソッドがありますが、これは OOP のようなものではありませんが、そのコードを変更することはできません。前述の Java クラスをサブクラス化する Scala クラスがあると仮定すると、その保護された静的メンバーを呼び出すにはどうすればよいでしょうか?

4

1 に答える 1

21

よくある質問-Javaの相互運用性を参照してください。

これはScalaの既知の制限です。Scalaには「静的」メンバーの概念はありません。代わりに、ScalaはクラスYの静的メンバーをシングルトンオブジェクトY(クラスYのコンパニオンオブジェクト)のメンバーとして扱います。このクラスから継承する場合、クラスYの保護されたメンバーにのみアクセスできますが、オブジェクトYの保護されたメンバーにはアクセスできません。

Scalaのオブジェクトモデルの整合性を根本的に損なうことなく、Scalaが静的保護をシミュレートする方法はないため、これは変更されません。この制限を回避するには、保護された静的内部クラスへのすべてのアクセスをカプセル化するJavaコードを使用して、囲んでいるクラスの実装を作成する必要があります。

制限とその回避策の詳細と具体例については、チケット#1806を参照してください。

于 2010-12-15T08:35:04.080 に答える