【发布时间】:2012-03-13 11:18:15
【问题描述】:
我有这个代码:
List<Runnable> r = new ArrayList<>();
for(int i = 0; i < 10; i++) {
r.add(new Runnable() {
@Override
public void run() {
System.out.println(i);
}
});
}
它显然无法编译,因为 i 需要是 final 才能在匿名类中使用。但我不能让它成为最终的,因为它不是。你会怎么办?一个解决方案是复制它,但我认为可能有更好的方法:
List<Runnable> r = new ArrayList<>();
for(int i = 0; i < 10; i++) {
final int i_final = i;
r.add(new Runnable() {
@Override
public void run() {
System.out.println(i_final);
}
});
}
EDIT 只是为了清楚起见,为了示例,我在这里使用了 Runnable,问题实际上是关于匿名类的,它可以是其他任何东西。
【问题讨论】:
-
我认为没有更好的方法...
-
由于显而易见的原因,循环计数器永远不能成为最终的,我认为你将值复制到最终变量的方法是唯一的方法(但我对我可能的替代方案感兴趣丢失)。
标签: java