gpt4 book ai didi

java - 可运行内联类声明 - 能够访问外部非最终变量

转载 作者:行者123 更新时间:2023-11-30 09:10:24 25 4
gpt4 key购买 nike

在下面的代码中,我想知道为什么内联类中的 run() 能够访问外部类变量——信号量(即使它没有被声明为 final)。

    private Semaphore semaphore = new Semaphore(bufferSize);

private Runnable producerRunnable = new Runnable(){

@Override
public void run()
{
try
{
semaphore.acquire();
}
catch(InterruptedException e)
{
System.out.println("producer was interrupted while trying to acquire semaphore");
}
}
};

我希望 Eclipse 标记一个编译错误——因为信号量引用没有被声明为 final

最佳答案

这是正常的。最终要求仅描述为适用于局部变量和参数(JLS):

Any local variable, formal parameter, or exception parameter used but not declared in an inner class must either be declared final [...].

封闭实例的成员不需要是最终的来访问它们。

关于java - 可运行内联类声明 - 能够访问外部非最终变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22549452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com