Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将常规Int转换为最终Java_Java_Inner Classes - Fatal编程技术网

将常规Int转换为最终Java

将常规Int转换为最终Java,java,inner-classes,Java,Inner Classes,我试图在一个循环中实现一个内部类,并且遇到了一个有趣的情况。内部类有方法,但是,当我尝试访问变量时,Netbeans会给我一个编译器错误,并告诉我将int设置为final 因为int是一个循环变量,所以它不能是final。我曾尝试创建新变量并将其与循环变量相等,但这仍然会引发相同的错误 以下是基本语法(伪代码): for(int i=0;i

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

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

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

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的答案。感谢您的回复。但是为什么一个内部类不能访问一个超出其作用域的局部变量呢。提供了可变性,没有任何性能损失或包装对象的复杂性。提供了可变性,没有任何性能损失或包装对象的复杂性。这个答案提供了一个很好的解决方案,帮助了我。谢谢你的发帖。这个答案为我提供了一个很好的解决方案。谢谢你的发帖。