Почему нельзя использовать метод r для переменной доступа c? Я знаю, что он не может получить доступ к переменной, но я пытаюсь понять, почему это не так.
public class A {
public void m() {
class B implements I {
public void r() {
. . .
}
}
final int c;
. . .
}
}
Поскольку c
- локальная переменная и не входит в область действия к тому времени, когда объявлен локальный класс B
Если вы объявили его перед объявлением класса и правильно инициализировали его, вы могли бы использовать его
class A {
public void m() {
final int c = 42;
class B implements I {
public void r() {
System.out.println(c);
}
}
}
}
В вашем коде есть две проблемы:
c
является окончательной, но ей не присваивается значение. Вы должны указать его на что-то, когда вы его объявите.c
из метода r()
вы должны сначала объявить его, то есть до объявления метода r()
. Самый простой способ исправить это - переместить переменную c
в класс A
а не объявлять ее в классе B