6

私は Java で書かれたいくつかのコードを持っています。新しいクラスは Scala で書く予定です。基本クラスの保護された静的メンバーへのアクセスに関して問題があります。サンプルコードは次のとおりです。

Java コード:

class Base{
    protected static int count = 20;
}

スカラコード:

class Derived extends Base{
    println(count);
}

これに関する提案はありますか?既存の基本クラスを変更せずにこれを解決するにはどうすればよいですか

4

1 に答える 1

9

これは Scala では不可能です。Scala には、親クラスのメンバーにstaticアクセスできないという表記がないためです。protected staticこれは既知の制限です。

回避策は、次のようなことです。

// Java
public class BaseStatic extends Base {
  protected int getCount() { return Base.count; }
  protected void setCount(int c) { Base.count = c; }
}

代わりに、この新しいクラスから継承し、getter/setter メソッドを介して静的メンバーにアクセスできるようになりました。

// Scala
class Derived extends BaseStatic {
  println(getCount());
}

protected static見苦しいですが、本当にメンバーを使いたいのであれば、そうしなければなりません。

于 2012-08-20T11:02:56.530 に答える