java为什么JDK 8允许一个局部内部类(在方法内部)访问封闭方法的非最终局部变量?
class Outer
{
public void method1()
{
int x = 10;
class Inner
{
public void inMethod()
{
System.out.println(x);
}
}
Inner i = new Inner();
i.inMethod();
}
public static void main(String[] args)
{
Outer obj = new Outer();
obj.method1();
}
}
我已经回答了一些关于StackOverflow的问题,甚至那些问题都没有精确的答案。 Method local inner class - can access non final local variable
# 1 楼答案
嗯,
x
没有标记为final,但它是effectively-final
。 如果在int x = 10;
下面添加x += 5;
,它将不再有效,因为变量不再是有效的final。 https://www.baeldung.com/java-effectively-final我想这主要是为了更好地支持lambdas而改变/实现的。想象一下,如果要在lambda中使用变量
final
,您必须始终标记该变量