доступ к локальной переменной в «методе локальных внутренних классов» - PullRequest
0 голосов
/ 13 октября 2019

Какова внутренняя причина, по которой в локальном внутреннем классе метода мы можем получить доступ только к конечным или эффективно конечным локальным переменным метода, в котором объявлен этот внутренний класс? Пожалуйста, смотрите ниже пример.

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 локальные переменные должны быть явно определены как окончательные, если вы хотите получить доступ к этой переменной в локальном внутреннем классе метода.

...