首页 > 解决方案 > 为什么从 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 上经历了几个问题,即使这些问题都没有准确的答案。 方法局部内部类 - 可以访问非最终局部变量

标签: javamethodslocalinner-classesfinal

解决方案


好吧,x没有标记为最终,但它是effectively-final。如果您在x += 5;下面添加int x = 10;,它将不再起作用,因为该变量不再是有效的最终变量。 https://www.baeldung.com/java-effectively-final

我想这主要是为了更好地支持 lambdas 而改变/实现的。final想象一下,如果你想在 lambda 中使用它,你必须总是标记一个变量。


推荐阅读