引用内部类的封闭实例

Sim*_*mon 4 java

这只是一个知识/好奇心问题.

在Java工作了几年之后,这才刚刚打动了我.

class Foo {

   class Bar{

      Foo.this.doSomething();

   }

}
Run Code Online (Sandbox Code Playgroud)

当我看到时Foo.this,我会认为它是一个静态参考,显然不是这种情况.

我知道这是Java规范的一部分,但确切地说,当你使用它时会发生什么<Class>.this

这是"它只是"的东西之一吗?

Jon*_*eet 9

我知道这是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();
      }
   }
}
Run Code Online (Sandbox Code Playgroud)