为什么我会得到"从内部类引用的局部变量必须是最终的"?

dav*_*b17 0 java javafx

我甚至不确定这个代码是否会做任何事情,即使它有效,但我不知道如何摆脱"从内部类引用的局部变量必须是最终的或有效的最终"错误消息,显示以"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();     
    }   
}
Run Code Online (Sandbox Code Playgroud)

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

ass*_*ias 6

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

final int i0 = i;
Run Code Online (Sandbox Code Playgroud)

在你的循环中使用i0而不是i作为数组的索引应该修复错误.

或者,正如@James_D所评论的那样,您也可以Sprite sprite = fireballRight[i];在匿名类之前添加并spritehandle方法内部使用.

请注意,final在这种情况下,修饰符对于Java 8+是可选的.