Java: 匿名内部クラスで外部クラスメソッドを呼び出す



android inner-classes (1)

後者はより明示的で、内部クラスに同じ名前のクラスが存在する場合は、外部クラスメソッドを呼び出すことができます。

class OuterClass {
    void foo() { System.out.println("Outer foo"); }

    View.OnClickListener mListener1 = new View.OnClickListener() {
        void foo() { System.out.println("Inner foo"); }

        @Override public void onClick(View view) {
            foo(); //Calls inner foo
            OuterClass.this.foo(); //Calls outer foo
        }
    }

    View.OnClickListener mListener2 = new View.OnClickListener() {
        @Override public void onClick(View view) {
            foo(); //Calls outer foo
            OuterClass.this.foo(); //Calls outer foo
        }
    }
}

最近、私はhere説明したアンドロイドプロジェクトで不思議な問題に遭遇しました。 私は何とか問題を解決しましたが、その背後にある正確な理由はまだ分かりません。

私は内部クラスの関数foo()を呼びたいとしましょう。 問題は、それを直接のように呼び出すことと、

foo();

または外部クラスインスタンスで呼び出す

OuterClass.this.foo();

さらに、誰かがこれに関連する私の最後のhereチェックして、エラーがなぜ発生するのかを知ることができれば感謝します。 どうもありがとう。

PS:私は、非静的な内部クラスは常に外部クラスのインスタンスを保持することをどこかで読んでいます。 だから、私はfoo()だけを使うと、そのインスタンスを使って外部関数を呼び出すでしょうか?





inner-classes