当前位置: 首页 > 知识库问答 >
问题:

从anonymuos内部类访问外部类final局部变量

祝锐
2023-03-14

但是,如果我在内部类中声明了一个同名的variabe呢?有什么方法可以显式引用外部变量吗?

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?
            }
        });
    }
}

顺便说一句,这和这个问题不同,因为它考虑的是局部堆栈变量。

共有1个答案

尹俊贤
2023-03-14

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

如果要在声明第二个str时同时使用这两个str,则必须将其存储在其他对象中。

您的run方法在当前线程堆栈中获取私有的堆栈框架。新变量只需添加到堆栈中。执行run后,将删除堆栈框架。

 类似资料:
  • 问题内容: 在内部类中,可以访问外部类的变量,但不能访问方法的局部变量。我了解了无法访问方法的局部变量的部分,但我想知道为什么外部类变量可以访问? 我的理解是,由于内部类与外部类绑定,因此只要父级可用,子级就可以访问其父级变量。我对么? 问题答案: 假设您的外部类在内部类的范围内(非静态)被称为,以获取该字段。 例如, 其中Outer是类的名称,并标识该字段。 您也可以直接抓取它,但是如果由于阴影

  • 在内部类中,外部类的变量是可访问的,但方法的局部变量不是。我理解了关于方法的局部变量不可访问的部分,但我想知道为什么外部类变量是可访问的? 我的理解是,由于内部类与外部类绑定,因此只要父类可用,子类就可以访问其父变量。我说得对吗?

  • 问题内容: 如何从内部类访问外部类? 我正在重写一种使它在不同线程上运行的方法。从内联线程中,我需要调用原始方法,但是当然只要调用就会变成无限递归。 具体来说,我在扩展BufferedReader: 这个地方给了我我找不到的NullPointerException。 谢谢。 问题答案: 像这样: 上面的测试在执行时显示:

  • 我得到了一个问题,对内部类的局部变量访问需要声明为final。从方法createGrids()->“”中,i是一个需要声明为final的局部变量。我不知道为什么,我在字段中添加了final,但它并不起作用。 //略

  • 问题内容: 我想使用a 对图进行拓扑排序。为简便起见,我想为比较器使用匿名内部类。但是,我需要访问该图才能确定我正在查看的节点的程度。这可能吗? 正确的代码 问题答案: 是的,使其最终化: 有关最终关键字,请参见最终词: 匿名本地课程 第二种情况涉及最终变量,实际上是语言语义所规定的。在这种情况下,除非声明为final,否则Java编译器将不允许您使用变量。这种情况出现在闭包(也称为匿名本地类)中

  • 问题内容: 在下面显示的代码片段中,内部类本身继承了外部类。 方法中的唯一语句(最后一个片段)将值分配给类的私有字段,然后调用该方法。 该方法会导致另一个字符串- 要设置的私人领域中的类调用之前的方法延长。 因此,方法中的以下两个语句: 应该显示 另一个价值 另一个价值 但是他们显示 初始值 初始值 为什么会这样? 问题答案: 方法和领域都是。因此,其他子类(包括子类)均无法访问它们。它们不是继承