有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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

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