OuterClass.this.someMethod() 背后的基本原理是什么?

What's the rationale behind OuterClass.this.someMethod()?

以下是合法的(据我所知):

class Outer {
    void someMethod() {
        // do something
    }

    class Inner {
        void innerMethod() {
            Outer.this.someMethod();
        }
    }
}

虽然我明白发生了什么以及结果是什么,但我不明白为什么这样可以。

我最困惑的是如何通过静态成员语法访问外部 class 的实例:Outer.this 不应该 this,对特定实例的引用Outer 的,什么都不是静态的?语法相同但功能不同,还是 this 某种程度上是 Outer 的静态字段?

换句话说,该代码使用 Class.field 语法访问外部 class 的实例,我一直将其与静态成员相关联。但是,如果它是 class 的一个特定实例,它怎么可能是静态的呢?按照这种逻辑,Outer 的不同实例将 return 与 Object.this 不同的 Outer 对象......这不是静态的......我的大脑受伤了。

在你的内部class中,this指的是你的Inner实例,所以你需要一种方法来引用外部实例,或者外部实例的字段,以防万一它们与内部实例中的字段发生冲突。因此,此语法指示您指的是 class 的哪个实例,它不是静态访问!

https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

this 确实不是静态的。这只是一个简单的符号,用于区分生活在同一范围内的不同对象。

如果没有这种表示法,就无法从 Inner 对象中获取对 Outer 对象的引用。将 Outer.this.someMethod() 替换为 this.someMethod() 会出现编译错误,因为 this 本身引用了 Inner 对象(它没有 someMethod 方法)。

这是指当前对象。静态fields/methods整体上属于class。 在 inner class 内部,这将代表 Inner class 对象。 this.someMethod() 会报错,因为内部 class 中没有 someMethod()。因此,您需要一种方法来区分内部和外部 class 字段(如果它们相同)。 Outer.this.someMethod() ~ 指的是outer class的someMethod()函数。