为什么从 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