与Node.js一起工作了几年之后,我正在使用Vert.x,并试图复制我们在require('async')中看到的某些功能
package huru.util;
import java.util.ArrayList;
import java.util.List;
interface AsyncCallback {
public void cb(Object e, Object v);
}
interface AsyncTask {
public void run(AsyncCallback cb);
}
interface FinalCallback {
public void run(Object e, List<Object> v);
}
public class Async {
static void Parallel (List<AsyncTask> tasks, FinalCallback f) {
List<Object> results = new ArrayList<Object>();
int count = 0;
for(int i = 0; i < tasks.size(); i++){
tasks.get(i).run((e,v) -> {
if(e != null){
f.run(e, null);
return;
}
count++; // ! here, count needs to be final ??
results.set(i,v);
if(count == tasks.size()){
f.run(null, results);
}
});
}
}
}
以上已到达目标,但出现此错误:
lambda表达式中使用的变量应为最终变量或有效变量 最终
我认为这是我们在JS中看到的类似问题,随着循环的继续,i的值可能会发生变化。
有人知道如何减轻这一压力吗?将其包装到一个自调用函数中将是如何使用JS做到这一点。