为什么Java内部类要求外部类的变量是final的



可能的重复项:
Java - 内部类和局部变量
如何将变量标记为 final 允许内部类访问它们?

Local Inner 类不仅可以访问实例变量,还可以访问方法(定义它们的)的局部变量,但局部变量必须声明final

为什么在这种情况下必须声明局部变量final

原因是本地内部类的实例可能从方法返回,并在方法返回后返回。在这种情况下,本地方法变量在您访问它们时将不存在。
一旦您将它们定义为最终的,它们实际上是恒定的,因此即使在之后也可以安全访问。检出不能引用内部类中的非最终变量以获取更多详细信息。

你说的是匿名类。局部变量(仅)必须final才能被其实现引用,因为代码可能在未知的执行帧中执行,也可能在另一个线程中执行,因此编译器唯一希望使用值的是,如果它是匿名类实例化(声明)时的常量 - 即如果变量final

最新更新