Доступ метода внутреннего класса к переменной родительского метода

1

Почему нельзя использовать метод r для переменной доступа c? Я знаю, что он не может получить доступ к переменной, но я пытаюсь понять, почему это не так.

public class A {
  public void m() {
    class B implements I {
      public void r() {
        . . .
      }
    }
    final int c;
    . . .
  }
}
  • 0
    Это на самом деле компилируется? Я не знал, что вы можете вкладывать внутренние классы в методы.
  • 0
    Указывать мне на документированную информацию тоже было бы хорошо.
Показать ещё 1 комментарий
Теги:

2 ответа

2
Лучший ответ

Поскольку c - локальная переменная и не входит в область действия к тому времени, когда объявлен локальный класс B

Если вы объявили его перед объявлением класса и правильно инициализировали его, вы могли бы использовать его

class A {
    public void m() {
        final int c = 42;

        class B implements I {
            public void r() {
                System.out.println(c);
            }
        }
    }
}
  • 0
    Я думаю, что это отвечает на вопрос вашим утверждением. Вместо того, чтобы пытаться исправить код, я искал причину, по которой это не сработало. При компиляции это редактор выдает, "не могу найти символ - переменная c". Так что сфера имеет смысл. Спасибо!
1

В вашем коде есть две проблемы:

  1. Переменная c является окончательной, но ей не присваивается значение. Вы должны указать его на что-то, когда вы его объявите.
  2. Если вы хотите получить доступ к c из метода r() вы должны сначала объявить его, то есть до объявления метода r().

Самый простой способ исправить это - переместить переменную c в класс A а не объявлять ее в классе B

Ещё вопросы

Сообщество Overcoder
Наверх
Меню