過去の日記

2005-07-24 [長年日記]

不明瞭な答えだった [hatena][java]

Java で内部クラスから外部クラスの関数を明示的に呼ぶときはど.. - 人力検索はてな
http://www.hatena.ne.jp/1122203296

4.の回答が私だけど、

Outer.thisの形式は覚えておくと色々使えます。

が曖昧だった。
メソッドに限らずフィールド参照にも使える、というだけの意味でしかなかった。
メソッドに限らずフィールド参照は当然できる。
それ以外に、クラスOuterを引数に取る他のクラスのメソッドを呼びたい場合でも。

class Outer {
  void foo(){
  }

  class Inner {
    void foo() {
    }

    //ここから下が回答です。
    void bar() {
      foo(); //Inner#foo()のこと
      Outer.this.foo(); //Outer#fooのこと
      
      //Baz.execがOuterを引数に取るメソッドだとして
      Baz baz = new Baz();
      baz.exec(Outer.this);  //この様に呼び出せる。
    }
  }

}