关于内部类:将Regular Regular Int转换为Final Java

Cast Regular Int to Final Java

本问题已经有最佳答案,请猛点这里访问。

我正试图在一个循环中实现一个内部类,并且遇到了一个有趣的情况。但是,内部类有方法,当我尝试访问变量时,NetBeans会给我一个编译器错误,并告诉我将int设为final。

因为int是一个循环变量,所以它不能是final。我已经尝试创建新的变量并将它们等同于循环变量,但这仍然会引发相同的错误。

以下是基本语法(伪代码):

1
2
3
4
for(int i = 0; i < 10; i++)
{
     panels[i].printI(new printI(){System.out.println(i);});
}

有什么主意吗?


添加一个临时的final变量来保存该值:

1
2
3
4
5
for(int i = 0; i < 10; i++)
{
     final int tmp = i;
     panels[i].printI(new printI(){System.out.println(tmp);});
}


这就是成语:

1
2
3
4
5
for(int i = 0; i < 10; i++)
{
  final int j = i;
  panels[i].printI(new printI(){System.out.println(j);});
}


或者使用数组变量,这样可以保存一行代码;)

1
2
3
4
for(final int[] i = {0}; i[0] < 10; i[0]++)
{
     panels[i[0]].printI(new printI(){System.out.println(i[0]);});
}