4

これは知識/好奇心に関する質問のみです。

Java で数年過ごした後、これは私を驚かせただけです。

class Foo {

   class Bar{

      Foo.this.doSomething();

   }

}

を見るとFoo.this、明らかにそうではない静的参照であると思います。

これがJava仕様の一部であることは知っていますが、使用すると正確に何が起こっているの<Class>.thisでしょうか?

それはそれらの「それはただある」ことの1つですか?

4

1 に答える 1

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();
      }
   }
}
于 2013-04-13T06:50:22.650 に答える