当前位置: 首页 > 面试题库 >

为什么会出现“从内部类引用的局部变量必须是最终的”?

卫增
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();     
    }   
}

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


问题答案:

您尚未显示所有代码,但我怀疑添加了以下内容:

final int i0 = i;

在循环内使用i0而不是将其i用作数组的索引应该可以修复错误。

另外,如@James_D所评论,您还可以Sprite sprite = fireballRight[i];在匿名类之前添加spritehandle方法内部使用。

请注意,在finalJava 8+的情况下,修饰符是可选的。



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

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

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

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

  • 问题内容: 我已经在Google上进行了广泛的搜索,但均无济于事。我似乎无法将这个概念笼罩在脑海中。为什么本地班级会接受静态最终字段?如下面的以下示例: 在EnglishGoodbye课堂上,允许告别可变吗?为什么?我很困惑。为什么允许但没有静态变量?我知道为什么它不能访问封闭范围的成员,除非它们是一个编译器时间常数,因为当函数结束时这些变量不再存在,但类可能不存在。对?我只是对此感到困惑。 谢谢

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