一尘不染

Lambda:局部变量需要最终变量,实例变量不需要

java

在lambda中,局部变量需要是最终变量,而实例变量则不需要。为什么这样?


阅读 414

收藏
2020-03-12

共1个答案

一尘不染

字段和局部变量之间的根本区别在于,当JVM创建lambda实例时,将复制局部变量。另一方面,字段可以自由更改,因为对它们的更改也将传播到外部类实例(它们的范围是整个外部类,如Boris所指出的)。

考虑到匿名类,闭包和Labmdas的最简单方法是从可变范围的角度来看。想象一个为传递给闭包的所有局部变量添加的副本构造函数。

2020-03-12