即使方法超出范围,Inner class 如何访问方法中的最终变量?
How final variables in method can be accessed by Inner class even if method goes out of scope?
为了这个答案,我已经经历了很多 link。而且我知道语法上 Java 不允许在 Inner 类 中访问非最终变量。
根据 this link,我还了解到,即使方法完成且局部变量超出范围,使局部变量成为 final 也可以使其保持活动状态。
但是,如果一个方法超出范围,如何使其成为最终方法才能使其在被引用的内部 类 中存活?
我指的是下面的代码。
public class Outer {
public static void outerMethod() {
int methodVariable = 40;
class Inner {
public void innerMethod() {
System.out.println(methodVariable); // This line produces compile time error.
}
}
}
}
如果您在调试器中检查 Inner
class 的实例,您会发现 methodVariable
:
有一个字段
并不是说它是唯一可能的实现,但似乎编译器实际上为 methodVariable
创建了一个私有字段并将变量的值复制到那里。
这可能也是变量必须是最终变量或有效最终变量的原因。如果变量的值发生变化,则无法再与字段的值同步。
为了这个答案,我已经经历了很多 link。而且我知道语法上 Java 不允许在 Inner 类 中访问非最终变量。 根据 this link,我还了解到,即使方法完成且局部变量超出范围,使局部变量成为 final 也可以使其保持活动状态。
但是,如果一个方法超出范围,如何使其成为最终方法才能使其在被引用的内部 类 中存活?
我指的是下面的代码。
public class Outer {
public static void outerMethod() {
int methodVariable = 40;
class Inner {
public void innerMethod() {
System.out.println(methodVariable); // This line produces compile time error.
}
}
}
}
如果您在调试器中检查 Inner
class 的实例,您会发现 methodVariable
:
并不是说它是唯一可能的实现,但似乎编译器实际上为 methodVariable
创建了一个私有字段并将变量的值复制到那里。
这可能也是变量必须是最终变量或有效最终变量的原因。如果变量的值发生变化,则无法再与字段的值同步。