这只是一个知识/好奇心问题。
在Java工作了几年之后,这只是让我感到震惊。
class Foo {
class Bar{
Foo.this.doSomething();
}
}
当我看Foo.this
时,我会认为这是一个静态参考,显然并非如此。
我知道这是Java规范的一部分,但是当你使用<Class>.this
时到底发生了什么?
这是“它只是”的东西吗?
答案 0 :(得分:8)
我知道这是Java规范的一部分,但确切地说当你使用.this时会发生什么?
它只是指Bar
中的“隐藏”字段。通过反编译最容易看到这一点。您将看到有一个Bar
构造函数引用了Foo
的实例。该引用存储在一个字段中,然后当您使用Foo.this
时,它只访问该字段。因此,假设您将Foo.this.doSomething()
置于someMethod
来电,您的代码类似于:
class Foo {
static class Bar {
private final Foo $foo;
Bar(Foo foo) {
this.$foo = foo;
}
public void someMethod() {
$foo.doSomething();
}
}
}