Java 是否有一个';适当的';避免';必须是最终的';错误?
我想写一个这样的循环:Java 是否有一个';适当的';避免';必须是最终的';错误?,java,compiler-errors,Java,Compiler Errors,我想写一个这样的循环: ArrayList<Thread> threads = new ArrayList<>(); for(int i = 0; i < THREADS_TOTAL; i++) { threads.add(new Thread() { @Override public void run(){ foo(i); } }); // more code } A
ArrayList<Thread> threads = new ArrayList<>();
for(int i = 0; i < THREADS_TOTAL; i++) {
threads.add(new Thread() {
@Override
public void run(){
foo(i);
}
});
// more code
}
ArrayList threads=new ArrayList();
对于(int i=0;i
但我得到了一个编译器错误
在封闭范围中定义的局部变量必须是final或
实际上是最终的
有没有办法避免此错误,特别是当所讨论的变量是基元类型,并且匿名类无论如何都不应该看到更改时?我考虑的选项有:
i
传递到构造函数中。我不喜欢这个选项,因为它会创建不必要的间接寻址,而且这是在创建单元测试的上下文中,所以我最终会得到很多额外的内部类,每种情况一个//更多的代码
,此操作不起作用intj=i
在循环中,并在匿名类中使用j
。到目前为止,这似乎是最“干净”的选项,但我仍然不喜欢它,因为这一行没有语义意义,它只是为了安抚编译器最直接的方法是:
ArrayList<Thread> threads = new ArrayList<>();
for(int i = 0; i < THREADS_TOTAL; i++) {
final int good_name = i;
threads.add(new Thread(() -> foo(good_name)));
// more code
}
ArrayList threads=new ArrayList();
对于(int i=0;ifoo(好名字));
//更多代码
}
简明扼要