Java: вызов метода внешнего класса в анонимном внутреннем классе - программирование
Подтвердить что ты не робот

Java: вызов метода внешнего класса в анонимном внутреннем классе

Недавно я столкнулся с загадочной проблемой в проекте Android, который я описал здесь здесь. Я как-то решил проблему, но до сих пор не знаю точной причины этого.

Скажем, я хочу вызвать функцию foo() во внутреннем классе. Вопрос в том, какая разница между его прямым вызовом, например

foo();

или вызов его с помощью экземпляра внешнего класса

OuterClass.this.foo();

Кроме того, я буду признателен, если кто-нибудь сможет проверить мой последний question, связанный с этим, и дать мне понять, почему возникает ошибка. Большое спасибо.

PS: Я где-то читал, что нестатический внутренний класс всегда будет содержать экземпляр внешнего класса. Поэтому он будет вызывать внешнюю функцию, используя этот экземпляр, если я использую только foo()?

4b9b3361

Ответ 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
        }
    }
}