通过 inner-class 实例从 outer-class 访问 outer-class 字段

Accessing outer-class fields through inner-class instance from outer-class

这是我正在努力解决的一个更大问题的一个简短子问题。

为什么我不能在第 8 行通过外部 class 中的内部 class 实例访问外部 classes 字段?

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

Why can't I access the outer classes field through an instance of inner class in outer class in line 8?

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

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

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