Java: вызов метода внешнего classа в анонимном внутреннем classе
Недавно я столкнулся с загадочной проблемой в проекте Android, который я описал здесь . Я как-то решил проблему, но до сих пор не знаю точной причины этого.
Предположим, я хочу вызвать функцию foo () во внутреннем classе. Вопрос в том, в чем разница между прямым вызовом
foo();
или вызов его с помощью экземпляра внешнего classа
- Попытка реализовать текстовую игру Hangman в Java
- Как использовать существующую базу данных с Android-приложением
- В чем смысл «этого» в Java?
- Создать новый class из переменной в Java
- Ошибка «Основной метод не найден» при запуске программы?
OuterClass.this.foo();
Кроме того, я буду признателен, если кто-нибудь сможет проверить мой последний вопрос, связанный с этим, и дайте мне понять, почему возникает ошибка. Большое спасибо.
PS: Я где-то читал, что нестатический внутренний class всегда будет содержать экземпляр внешнего classа. Таким образом, он будет вызывать внешнюю функцию, используя этот экземпляр, если я использую только foo ()?
- Android Geocoder getFromLocationName всегда возвращает null
- Переопределить цвета контекстного меню в Android
- java: Class.isInstance vs Class.isAssignableFrom
- Как анализировать XML с помощью анализатора SAX
- Сколько способов конвертировать bitmap в строку и наоборот?
- как преобразовать цвет rgb в int в java
- Gson превращает массив объектов данных в json - Android
- Как разобрать JSON из Java HTTPResponse?
Последнее более явное и позволит вам вызвать метод внешнего classа, если он существует во внутреннем classе с тем же именем.
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 } } }