JavaRush /Java блог /Random UA /Вкладені, локальні та анонімні класи
WhatNick
17 рівень

Вкладені, локальні та анонімні класи

Стаття з групи Random UA
Всім доброго доби! Став глибше копати різновиди класів та написав код, який містить клас. Цей клас містить метод main()та статичний вкладений клас. Статичний вкладений клас містить метод. Метод створює локальний клас. Локальний клас має метод, який створює анонімний клас класу, що обрамляє (сильно сумніваюся, що подібні збочення мають місце в практиці програмування, але суто спортивного інтересу заради вирішив помудрити, так що прохання — не кидатися камінням. Раніше часу, принаймні). Спрощено це виглядає так: Вкладені, локальні та анонімні класи - 1
class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    static class Inner { // СТАТИЧЕСКИЙ ВЛОЖЕННЫЙ КЛАСС
        int doInnerThings() { // ЛОКАЛЬНЫЙ МЕТОД ВНУТРЕННЕГО КЛАССА
            class LocalInner { // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ КЛАСС
                int doLocalInnerThings() { // МЕТОД ЛОКАЛЬНОГО КЛАССА
                    new Outer(5) {}; // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ АНОНИМНЫЙ КЛАСС
                }
            }
        }
    }
}
Мета: створити змінну в анонімному класі, використовуючи супер-клас, що обрамляє, і "перекинути" аргумент цієї змінної аж до внутрішнього класу, привласнивши його змінною внутрішнього класу, відповідно. Нижче наведено трохи розширений код, з моїми начерками.
class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    int outerValue = 0;

    Outer(int a)
    {
        this.outerValue = a*a;
    }

    int getValue() {
        return outerValue;
    }

    static class Inner { // ВНУТРЕННИЙ СТАТИЧЕСКИЙ КЛАСС
        public  int innerValue = doInnerThings();

        int doInnerThings() {
            final int innerValue = 0; // КАК ПЕРЕДАТЬ ЗНАЧЕНИЕ ЭТОЙ ПЕРЕМЕННОЙ ИЗ КЛАССА НИЖЕ?

            class LocalInner { // ЛОКАЛЬНЫЙ КЛАСС
                final public int localInnerValue;

                LocalInner() {
                    localInnerValue = doLocalInnerThings();
                }

                int doLocalInnerThings() {
                    final int[] localInnerAnonValue = {0};

                    new Outer(5) { // АНОНИМНЫЙ КЛАСС
                        @Override
                        int getValue()
                        {
                            localInnerAnonValue[0] = super.getValue();
                            return localInnerAnonValue[0];
                        }
                    };

                    return localInnerAnonValue[0];
                }

                int getlocalInnerValue() {
                    return this.localInnerValue;
                }
            }

            return innerValue;
        }
    }

    public static void main(String[] args) {
        Outer.Inner test = new Outer.Inner();
        System.out.println(test.innerValue);
    }
}
Проблема: метод int doInnerThings()Не можу надати змінній цього методу innerValueзначення змінної localInnerValue"з локального класу LocalInner. Буду радий допомоги! :)
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ