为什么从 JDK 8 开始,局部内部 class(在方法内部)可以访问封闭方法的非最终局部变量?
Why was it made possible from JDK 8 that a local inner class (inside a method) can access the non-final local variables of the enclosing method?
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();
}
}
我在 Whosebug 上回答了几个问题,即使是那些没有准确答案的问题。
Method local inner class - can access non final local variable
嗯,x
没有被标记为最终的,但它是 effectively-final
。
如果您在 int x = 10;
下方添加 x += 5;
它将不再起作用,因为该变量不再是有效的最终变量。
https://www.baeldung.com/java-effectively-final
我想这主要是 changed/implemented 更好地支持 lambda 的方式。想象一下,如果您想在 lambda 中使用它,则必须始终标记变量 final
。
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();
}
}
我在 Whosebug 上回答了几个问题,即使是那些没有准确答案的问题。 Method local inner class - can access non final local variable
嗯,x
没有被标记为最终的,但它是 effectively-final
。
如果您在 int x = 10;
下方添加 x += 5;
它将不再起作用,因为该变量不再是有效的最终变量。
https://www.baeldung.com/java-effectively-final
我想这主要是 changed/implemented 更好地支持 lambda 的方式。想象一下,如果您想在 lambda 中使用它,则必须始终标记变量 final
。