2

docsでは、次のように新しいクラスを作成する必要があると書かれています。

class MyView extends GLSurfaceView {
    public MyView(Context context) {
        super(context);
        setRenderer(renderer);
    }
}

今、私はScalaでそれをやり直そうとしました:

class BaseGameActivity extends Activity {
    object glview extends GLSurfaceView(this) {
        setRenderer(renderer)
        setEGLContextClientVersion(2)
    }
}

ただし、アプリケーションは例外 " java.lang.IllegalStateException: setRenderer already called for this instance" でクラッシュします。これは、Scala がスーパーコンストラクターを呼び出す方法に関係していると思われます。

ドキュメントに記載されている方法でコンストラクターをオーバーライドする方法を見つけようとしましたが、見つかりませんでした。ヒントをいただければ幸いです。

4

2 に答える 2

0

Java では同様に scala のコンストラクターは継承されません

したがって、オーバーライドすることはできません。継承しませんでした。また、基本クラスには既存のコンストラクターのいずれかを使用する必要があります。それらのすべてが呼び出しsetRenderer(renderer)ている場合、それはスーパーオブジェクトの構築中に呼び出され、サブタイプコンストラクターで2回目に呼び出すべきではないことは明らかです(クラス、オブジェクト、または混合トレイトのいずれか)。

于 2013-04-21T16:57:53.590 に答える