将常规Int转换为最终Java
我试图在一个循环中实现一个内部类,并且遇到了一个有趣的情况。内部类有方法,但是,当我尝试访问变量时,Netbeans会给我一个编译器错误,并告诉我将int设置为final 因为int是一个循环变量,所以它不能是final。我曾尝试创建新变量并将其与循环变量相等,但这仍然会引发相同的错误 以下是基本语法(伪代码):将常规Int转换为最终Java,java,inner-classes,Java,Inner Classes,我试图在一个循环中实现一个内部类,并且遇到了一个有趣的情况。内部类有方法,但是,当我尝试访问变量时,Netbeans会给我一个编译器错误,并告诉我将int设置为final 因为int是一个循环变量,所以它不能是final。我曾尝试创建新变量并将其与循环变量相等,但这仍然会引发相同的错误 以下是基本语法(伪代码): for(int i=0;i
for(int i=0;i<10;i++)
{
面板[i].printI(新的printI(){System.out.println(i);});
}
有什么想法吗?这就是成语:
for(int i = 0; i < 10; i++)
{
final int j = i;
panels[i].printI(new printI(){System.out.println(j);});
}
for(int i=0;i<10;i++)
{
最终int j=i;
panels[i].printI(新的printI(){System.out.println(j);});
}
这就是成语:
for(int i = 0; i < 10; i++)
{
final int j = i;
panels[i].printI(new printI(){System.out.println(j);});
}
for(int i=0;i<10;i++)
{
最终int j=i;
panels[i].printI(新的printI(){System.out.println(j);});
}
添加一个临时final
变量来保存值:
for(int i = 0; i < 10; i++)
{
final int tmp = i;
panels[i].printI(new printI(){System.out.println(tmp);});
}
for(int i=0;i<10;i++)
{
最终int tmp=i;
panels[i].printI(新的printI(){System.out.println(tmp);});
}
添加一个临时final
变量来保存值:
for(int i = 0; i < 10; i++)
{
final int tmp = i;
panels[i].printI(new printI(){System.out.println(tmp);});
}
for(int i=0;i<10;i++)
{
最终int tmp=i;
panels[i].printI(新的printI(){System.out.println(tmp);});
}
或使用数组变量,这样可以节省一行代码;)
for(final int[]i={0};i[0]<10;i[0]++)
{
面板[i[0]].printI(新的printI(){System.out.println(i[0]);});
}
或使用数组变量,这样可以节省一行代码;)
for(final int[]i={0};i[0]<10;i[0]++)
{
面板[i[0]].printI(新的printI(){System.out.println(i[0]);});
}
你就不能用final int j=i然后在循环的第一行编码>并将j
传递给System.out.println
?但是,如果我这样做,则循环将无法增加j,因为该值将被锁定?完全如此。请参阅qqilihq的答案。感谢您的回复。但是为什么一个内部类不能访问一个超出其作用域的局部变量呢然后在循环的第一行编码>并将j
传递给System.out.println
?但是,如果我这样做,则循环将无法增加j,因为该值将被锁定?完全如此。请参阅qqilihq的答案。感谢您的回复。但是为什么一个内部类不能访问一个超出其作用域的局部变量呢。提供了可变性,没有任何性能损失或包装对象的复杂性。提供了可变性,没有任何性能损失或包装对象的复杂性。这个答案提供了一个很好的解决方案,帮助了我。谢谢你的发帖。这个答案为我提供了一个很好的解决方案。谢谢你的发帖。