Java中lambda表达式中的局部变量的规则是什么?
一个拉姆达表达式可以捕获像变量本地和匿名类。换句话说,它们对封闭范围的局部变量具有相同的访问权限。对于lambda表达式中的局部变量,我们需要遵循一些规则。
Lambda表达式无法像匿名内部类一样定义任何新范围,因此我们无法声明与Lambda表达式的封闭范围中已声明的局部变量相同的局部变量。
在lambda表达式内部,我们无法将任何值分配给在lambda表达式外部声明的某些局部变量。因为在lambda表达式外部声明的局部变量可以是final或有效的final。
最终规则或有效最终规则也适用于方法参数和异常参数。
在这个和超级lambda表达式体内引用是与它们的闭合范围。因为lambda 表达式无法定义任何新范围。
示例
import java.util.function.Consumer;public class LambdaTest {
public int x = 1;
class FirstLevel {
public int x = 2;
void methodInFirstLevel(int x) {
Consumer<Integer> myConsumer = (y) -> { // Lambda Expression System.out.println("x = " + x);
System.out.println("y = " + y);
System.out.println("this.x = " + this.x);
System.out.println("LambdaTest.this.x = " + LambdaTest.this.x);
};
myConsumer.accept(x);
}
}
public static void main(String args[]) {
final LambdaTest outerClass = new LambdaTest();
final LambdaTest.FirstLevel firstLevelClass = outerClass.new FirstLevel();
firstLevelClass.methodInFirstLevel(10);
}
}
输出结果
x = 10y = 10
this.x = 2
LambdaTest.this.x = 1
以上是 Java中lambda表达式中的局部变量的规则是什么? 的全部内容, 来源链接: utcz.com/z/343418.html