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()函数。
以下是合法的(据我所知):
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()函数。