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

从外部类通过内部类实例访问外部类字段

贲高寒
2023-03-14

这是我正在研究的一个更大问题的一个简短的子问题。

为什么我不能通过第8行outer class中的inner class的实例访问outer类字段?

  • 字段在内部类中可见。
  • 外部类中的非静态方法仍然存在此问题。
  • 字段的可见性并不重要。无论从哪种方式,它都可以从内部类中看到。
  • 可以通过内部类中的(私有)getter访问该字段,但我出现问题的原因之一是,我希望避免这些。
  • 它应该成为不可变的构建器模式的一个变体,因此外部类和内部类是紧密一致地开发的。这是我敢于在没有getter的情况下直接访问字段的唯一原因。
public class OuterClass {

    private static OuterClass instanceOf(InnerClass innerClass) {
        return new OuterClass(innerClass.outerField);
    }

    public static OuterClass instanceOf(int arg) {
        return new OuterClass(arg);
    }

    private int outerField;

    private OuterClass(int arg) {
        this.outerField = arg;
    }

    // Outer class getters...

    public InnerClass build() {
        return new InnerClass(this);
    }

        public class InnerClass {

            private InnerClass(OuterClass outerClass) {
                outerField = outerClass.outerField;
            }

            // Inner class setters......

            public OuterClass build() {
                return OuterClass.instanceOf(this);
            }
        } // End InnerClass

} // End OuterClass

共有1个答案

姚鹤龄
2023-03-14

为什么我不能通过第8行outer class中的inner class的实例访问outer类字段?

因为该字段是类OuterClass的字段,而不是类InnerClass的字段。因此要访问它,您需要类OuterClass的实例,而不是类InnerClass的实例。

当然,在InnerClass定义中,您可以隐式访问OuterClass的所有字段。但这只是从上下文中访问的问题。您没有指定要访问字段的对象是什么,因此语言会自动为您选择该对象。通常是this.field,但对于包含类中的字段,它实际上是outerclass.this.field。

一旦您试图指出要访问字段的对象是什么,而不是让语言隐式地为您选择该对象,那么这个对象实际上必须是包含该字段的类。

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

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

  • 为什么这段代码不起作用 在这段代码工作的时候? 在第一段代码中,当我试图通过内部类“a”的对象引用内部类“a”的实例变量“x”时,我得到一个错误,说我是在静态上下文中使用内部类。在其他方法中执行相同操作时没有错误。

  • 问题内容: 是否可以从Java内部类中获取对它的引用? 即 问题答案: 您可以像这样访问外部类的实例:

  • 但是,如果我在内部类中声明了一个同名的variabe呢?有什么方法可以显式引用外部变量吗? 顺便说一句,这和这个问题不同,因为它考虑的是局部堆栈变量。

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