据我了解,lambda 表达式捕获的是值,而不是变量。例如,以下是编译时错误:
for (int k = 0; k < 10; k++) {
new Thread(() -> System.out.println(k)).start();
// Error—cannot capture k
// Local variable k defined in an enclosing scope must be final or effectively final
}
但是,当我尝试运行具有增强功能的相同逻辑时,for-loop一切正常:
List<Integer> listOfInt = new Arrays.asList(1, 2, 3);
for (Integer arg : listOfInt) {
new Thread(() -> System.out.println(arg)).start();
// OK to capture 'arg'
}
为什么它对于增强for循环而不是普通常规for循环工作正常,尽管增强for循环也在内部某处增加变量,如普通循环所做的那样。**
翻过高山走不出你
慕工程0101907
慕容森
相关分类