java—为什么JDK8允许本地内部类(方法内部)访问封闭方法的非最终局部变量?

0pizxfdo  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(297)

这个问题在这里已经有答案了

在Java8Lambda表达式中有效地使用final变量有什么好处(2个答案)
为什么在Java8中引入了“effectivefinal”[重复](1个答案)
上个月关门了。

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的问题,即使那些问题没有确切的答案。方法局部内部类-可以访问非最终局部变量

3wabscal

3wabscal1#

好, x 未标记为“最终”,但它是 effectively-final . 如果你加上 x += 5; 在......下面 int x = 10; 它将不再工作,因为变量不再是有效的最终变量。https://www.baeldung.com/java-effectively-final
我想这主要是为了更好地支持lambdas而改变/实现的。想象一下,您必须始终标记一个变量 final 如果你想在兰姆达车里用的话。

相关问题