gpt4 book ai didi

java - 从匿名内部类访问外部类最终局部变量

转载 作者:行者123 更新时间:2023-11-30 08:13:16 25 4
gpt4 key购买 nike

Java 匿名内部类允许无缝访问在外部对象的方法堆栈上声明的变量,只要它们被声明为 final

但是,如果我在内部类中声明了一个同名变量怎么办?有没有办法显式引用外部变量?

public class Outer {
public static void main(String[] args) throws Throwable {
new Outer().call();
}

private void call() throws Throwable {
final String str = "I'm the outer String!";
SwingUtilities.invokeAndWait(new Runnable() {

@Override
public void run() {
String str = "I'm the inner String!";

// This prints the inner String
System.out.print(str);

// So, can I have explicitly access to the outer String?
}
});
}
}

顺便说一句,这与 this 不同问题,因为它涉及本地堆栈变量。

最佳答案

您只能在 run 函数中使用 str 外部变量,直到声明具有相同名称的新局部变量为止。此时,您的新变量会影响另一个变量。

如果你想使用过去声明第二个 str,你必须将它存储在其他对象中。

您的运行方法在当前线程堆栈中获取私有(private)堆栈帧。新变量只是简单地添加到该堆栈中。执行run后,栈帧被移除。

你想要的是在它的范围之外访问方法参数(在新的 str 添加到堆栈之后)。

然而,外部 str 的堆栈帧仅可用于 java 调试架构。将此视为安全问题。

关于java - 从匿名内部类访问外部类最终局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30075983/

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