Java 为什么我会得到;从内部类引用的局部变量必须是final";?
我甚至不确定这段代码即使有效也能做些什么,但我不知道如何消除“从内部类引用的局部变量必须是最终的或有效的最终的”错误消息,它显示在以“fireballRight[I]”开头的三行上Java 为什么我会得到;从内部类引用的局部变量必须是final";?,java,javafx,Java,Javafx,我甚至不确定这段代码即使有效也能做些什么,但我不知道如何消除“从内部类引用的局部变量必须是最终的或有效的最终的”错误消息,它显示在以“fireballRight[I]”开头的三行上 Sprite[]fireballRight=新Sprite[50]; 公共权利{ 对于(int i=0;i
Sprite[]fireballRight=新Sprite[50];
公共权利{
对于(int i=0;i<50;i++){
新的AnimationTimer(){
公共无效句柄(){
fireballRight[i].setImage(“puercosloco/fireballRight.png”);
rightx++;
fireballRight[i]。设置位置(rightx,righty);
fireballRight[i].渲染(gc,80,55);
}
}.start();
}
}
任何指导都将不胜感激,谷歌似乎没有在这方面帮助我 您可以执行字段private和static。您可以执行字段private和static。正如它所说,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.
for(int i=0;i<50;i++){
最终int i2=i;
新的AnimationTimer()
{
公共无效句柄()
{
fireballRight[i2].setImage(“puercosloco/fireballRight.png”);//使用i2代替i。
正如它所说,vari
需要有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.
for(int i=0;i<50;i++){
最终int i2=i;
新的AnimationTimer()
{
公共无效句柄()
{
fireballRight[i2].setImage(“puercosloco/fireballRight.png”);//使用i2代替i。
您尚未显示所有代码,但我怀疑添加:
final int i0 = i;
在循环内部,使用i0
而不是i
作为数组的索引,应该可以修复错误
或者,正如@James_D所评论的,您还可以在匿名类之前添加Sprite-Sprite=fireballRight[i];
,并在句柄中使用Sprite
请注意,final
修饰符在本例中对于Java 8+是可选的。您尚未显示所有代码,但我怀疑添加:
final int i0 = i;
在循环内部,使用i0
而不是i
作为数组的索引,应该可以修复错误
或者,正如@James_D所评论的,您还可以在匿名类之前添加Sprite-Sprite=fireballRight[i];
,并在句柄中使用Sprite
请注意,final
修饰符在Java 8+中是可选的。哪里声明了rightx
呢?循环变量i
不是final。将它复制到另一个变量。哪里声明了rightx
呢?循环变量i
不是final。将它复制到另一个变量。A)静态很少是t他给出了正确的解决方案。B)它不会解决眼前的问题。A)static
很少是正确的解决方案。B)它不会解决眼前的问题。或者final-Sprite-Sprite=fireballRight[i];
相反,这对我来说更自然一些……或者final-Sprite-Sprite-Sprite=fireballRight[i]相反,这让我感觉更自然一点……原来是i
,原来是i
。