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

我甚至不确定这个代码是否会做任何事情,即使它有效,但我不知道如何摆脱“从内部类引用的局部变量必须是最终的或有效的最终”错误消息,显示在以“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]; 在匿名类之前,在handle方法中使用sprite

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

正如它所说,var i需要有final前缀。 将代码更改为以下内容: –

  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. 

您可以将字段设为私有和静态。