引用内部类的封闭实例

时间:2013-04-13 06:40:22

标签: java

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

在Java工作了几年之后,这只是让我感到震惊。

class Foo {

   class Bar{

      Foo.this.doSomething();

   }

}

当我看Foo.this时,我会认为这是一个静态参考,显然并非如此。

我知道这是Java规范的一部分,但是当你使用<Class>.this时到底发生了什么?

这是“它只是”的东西吗?

1 个答案:

答案 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();
      }
   }
}