更改
for (File x: store)
至
for (final File x: store)
编辑您的状态:
Its working but final variables are constant, here x is changing to each element of store.howz that working
x是for-each循环的参数,可以根据for-each循环的定义声明为final.每次循环循环时,就好像重新创建了x一样.
根据增强型for循环的JLS 14.14.2部分:
The enhanced for statement is equivalent to a basic for statement of the form:
for (I #i = Expression.iterator(); #i.hasNext(); ) {
VariableModifiersopt TargetType Identifier =
(TargetType) #i.next();
Statement
}
所以这告诉我final会像这样:
for (I #i = Expression.iterator(); #i.hasNext(); ) {
final VariableModifiersopt TargetType Identifier =
(TargetType) #i.next();
Statement
}
因此,x实际上是上面的标识符,实际上是在每次循环迭代时重新声明的.
在您的代码中,我认为它等同于:
for (Iterator iterator = Arrays.asList(scores).iterator(); iterator.hasNext();) {
final File file = iterator.next();
new Thread(new Runnable() {
public void run() {
new de().commit(file);
}
}).start();
}
编辑2
请注意,您可以改善对Thread的使用,并养成使用Runnable的习惯:
for (final File x: store){
new Thread(new Runnable() {
@Override
public void run() {
new de().commit(x); // "de" should be "De" since it is a class
}
}).start();
}