当前位置: 首页 > 知识库问答 >
问题:

为什么我得到“从内部类引用的局部变量必须是final”?

童化
2023-03-14

我甚至不确定这段代码是否能做任何事情,即使它有效,但我不知道该怎么做才能摆脱“从内部类引用的局部变量必须是最终的或有效的最终”错误消息,该错误消息显示在以“fireballRight[i]”开头的三行上。

Sprite[] fireballRight = new Sprite[50];

public void fireRight() {

    for(int i = 0; i < 50; i++) {
        new AnimationTimer() {
            public void handle() {      

                fireballRight[i].setImage("puercosloco/fireballright.png");                   

                rightx++;
                fireballRight[i].setPosition(rightx, righty);
                fireballRight[i].render(gc, 80, 55);           
            }
        }.start();     
    }   
}

任何指导将不胜感激,谷歌似乎并没有帮助我。

共有3个答案

暨宸
2023-03-14

您可以执行字段私有和静态。

太叔马鲁
2023-03-14

正如它所说,var i需要有最终的前缀。将代码更改为如下所示:-

    for(int i = 0; i < 50; i++) {
        final int i2 = i;
        new AnimationTimer()
        {
            public void handle()
            {      
                fireballRight[i2].setImage("puercosloco/fireballright.png"); // Use i2 instead of i.
郁宾鸿
2023-03-14

您还没有显示所有代码,但我怀疑添加

final int i0 = i;

在循环中,使用<code>i0

或者,正如@James_D所注释的那样,您还可以在匿名类之前添加 Sprite sprite = fireballRight[i];,并在 handle 方法中使用 sprite

请注意,对于 Java 8,在这种情况下,最终修饰符是可选的。

 类似资料:
  • 问题内容: 我什至不知道此代码即使能正常工作也不会做任何事情,但是我不知道该怎么做才能摆脱“从内部类引用的局部变量必须是最终的或实际上是最终的”错误消息,该错误消息在以“ fireballRight [i]”开头的三行中显示。 任何指导将不胜感激,谷歌似乎没有帮助我这一点。 问题答案: 您尚未显示所有代码,但我怀疑添加了以下内容: 在循环内使用而不是将其用作数组的索引应该可以修复错误。 另外,如@

  • 我正在尝试返回对象。 但我得到了 从内部类引用的局部变量必须是最终变量或实际上是最终变量 on < code > stats = statistics如何返回对象,但要确保< code >。close();是否正在运行?

  • 这个程序是我的类的最终赋值,我在弄清楚为什么我收到错误“从内部类引用的局部变量必须是最终的或实际上是最终的”时遇到了问题。该程序正在运行并发线程来对#的数组进行排序,然后找到该数组的高值和低值。当我在没有并发的情况下创建它时,我没有这个错误。我正在努力确定在哪里最终确定高变量和低变量。 这是产生错误的代码块。如果我使int高=数字[0];或int-low=数字[0];final,然后我得到一个错误

  • 问题内容: 根据Java语言规范§14.14.2,增强循环的变量必须在循环本地。换句话说,它将编译为: 但这不是: JLS没有为这种语言设计选择提供任何依据。我可以看到如果通过或通过注释修改了局部变量的原因,为什么必须出现类型名称,但是我不明白为什么不允许在其他地方声明的变量的裸名。是否有人对为什么施加此限制有任何见解? 编辑 到目前为止,有几个答案似乎表明,循环之外发生的事情是按这种方式设计语言

  • 我正在尝试从pojo创建一个函数,该函数在以下意义上使用细节类值的求和: 但是不知道为什么这一行< code > sum = sum . add(detail . getvalue());引发此错误: 从lambda表达式引用的局部变量必须是final或有效final 你能告诉我我做错了什么吗?谢了。

  • 我在找两个数的lcm。但是当我运行这个程序时,我得到了一个错误:UnboundLocalError:在赋值之前引用了本地变量'lcm',为什么我会得到这个错误呢?我不明白我的代码出了什么问题。请帮帮我 这是我的代码: