Java Lambda与方法参考 - 一个不接收调用者的本地变量

时间:2016-06-22 12:45:00

标签: java lambda method-reference

尝试从lambda重构为方法引用我意识到方法引用似乎没有得到调用者的局部变量(词法范围?)。当使用lambda作为其内联代码时,根本没有问题。

$scope.names=[];
$scope.articles=[];
$scope.whatever=[];

我理解这个方法的参数列表不会产生任何“appender”但是没有“隐藏”参数我可以用来访问调用者/消费者范围的词汇变量吗?

2 个答案:

答案 0 :(得分:2)

不,这是不可能的。

在编译期间解决词法范围。该方法以通用方式编写,可以从任何地方进行技术调用。因此,编译器无法猜测所有潜在调用的词法范围。

如果要保持单独的方法,唯一的方法是将调用包装为包装lambda并将局部变量作为参数传递。但我认为这不是原始目标。

答案 1 :(得分:1)

不,您无法创建一个可以访问方法之外的局部变量的常规方法。

保留局部变量副本的lambdas名称是 closure

我知道在Java中使用闭包的另一种方式是匿名内部类。