gpt4 book ai didi

android - 在 Scala 中覆盖 Java 构造函数

转载 作者:行者123 更新时间:2023-11-29 00:30:18 24 4
gpt4 key购买 nike

In the 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 调用 super 构造函数的方式有关。

我试图找出如何以 the docs 的方式覆盖构造函数描述,但找不到它。如果有任何提示,我将不胜感激。

最佳答案

在我看来,您正在将调用传播到与基类不同的构造函数。您正在传递对 this 的引用,而不是对 Context 对象的引用。可能是其他构造函数正在调用 setRenderer

你能尝试像这样创建一个内部类MyGLView吗:

class MyGLView(ctx: Context) extends GLSurfaceView(ctx) {
setRenderer(renderer)
}

看看会发生什么?

问题是 object 不允许为其构造函数提供参数。顶级对象必须可以在没有任何参数的情况下进行初始化(没有人调用它们的构造函数)。在您的情况下,您有一个内部对象,它可以引用周围类实例的成员。如果您确实需要在您的 Activity 类中使用内部对象,您可以这样做:

object glview extends GLSurfaceView(ctx) {
setRenderer(renderer)
}

其中 ctx 是周围类的成员。

关于android - 在 Scala 中覆盖 Java 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16133414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com