java – Lambdas:局部变量需要final,实例变量不需要

在lambda中,局部变量需要是final,但实例变量不是。为什么这样?
字段和局部变量之间的根本区别在于,当JVM创建一个lambda实例时,会复制局部变量。另一方面,字段可以自由地改变,因为它们的变化也被传播到外部类的实例(它的范围是整个外部类,如鲍里斯在下面指出的)。

关于匿名类,闭包和labmdas的最简单的方法是从可变范围的角度出发,想象一个复制构造函数为您传递给关闭的所有局部变量添加。

翻译自:https://stackoverflow.com/questions/25055392/lambdas-local-variables-need-final-instance-variables-dont

转载注明原文:java – Lambdas:局部变量需要final,实例变量不需要