JavaRush /Blog Java /Random-PL /Klasy zagnieżdżone, lokalne i anonimowe
WhatNick
Poziom 17

Klasy zagnieżdżone, lokalne i anonimowe

Opublikowano w grupie Random-PL
Dzień dobry wszystkim! Zacząłem głębiej zagłębiać się w typy klas i napisałem kod zawierający daną klasę. Ta klasa zawiera metodę main()i statyczną klasę zagnieżdżoną. Statyczna klasa zagnieżdżona zawiera metodę. Metoda tworzy klasę lokalną. Klasa lokalna ma metodę, która tworzy anonimową klasę klasy framingu (mocno wątpię, aby w praktyce programistycznej zdarzały się takie wypaczenia, ale w imię czysto sportowych zainteresowań zdecydowałem się zachować spryt, więc proszę nie rzucać kamieniami. W każdym razie przed czasem). W uproszczeniu wygląda to tak: Klasy zagnieżdżone, lokalne i anonimowe - 1
class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    static class Inner { // СТАТИЧЕСКИЙ ВЛОЖЕННЫЙ КЛАСС
        int doInnerThings() { // ЛОКАЛЬНЫЙ МЕТОД ВНУТРЕННЕГО КЛАССА
            class LocalInner { // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ КЛАСС
                int doLocalInnerThings() { // МЕТОД ЛОКАЛЬНОГО КЛАССА
                    new Outer(5) {}; // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ АНОНИМНЫЙ КЛАСС
                }
            }
        }
    }
}
Cel: utwórz zmienną w anonimowej klasie, używając superklasy ramującej i „wrzuć” argument tej zmiennej aż do klasy wewnętrznej, przypisując go odpowiednio do zmiennej klasy wewnętrznej. Poniżej nieco rozszerzony kod z moimi szkicami.
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);
    }
}
Problem: metoda int doInnerThings()Nie mogę przypisać innerValuewartości zmiennej localInnerValue„z klasy lokalnej do zmiennej tej metody LocalInner. Chętnie pomogę! :)
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION