Какова внутренняя причина, по которой в локальном внутреннем классе метода мы можем получить доступ только к конечным или эффективно конечным локальным переменным метода, в котором объявлен этот внутренний класс? Пожалуйста, смотрите ниже пример.
class Test{
int i = 10;
static int j = 20;
public void m1(){
int k = 30;
//k=40;
final int m = 40;
class Inner{
public void m2(){
System.out.println("value of i = " + i + " value of j = " + j + " value of k = " + k + " value of m = " + m);
}
}
Inner i = new Inner();
i.m2();
}
public static void main(String[] args){
Test t = new Test();
t.m1();
}
}
Если я попытаюсь изменить значение переменной k
(строка закомментирована в исходном коде), то произойдет ошибка компилятора с указанием "локальные переменные, на которые ссылается внутренний класс, должны иметь значение final
илиeffectively final
"Также в версиях Java ниже 1.8 локальные переменные должны быть явно определены как окончательные, если вы хотите получить доступ к этой переменной в локальном внутреннем классе метода.