JavaRush /Blog Java /Random-ES /Clases anidadas, locales y anónimas.
WhatNick
Nivel 17

Clases anidadas, locales y anónimas.

Publicado en el grupo Random-ES
¡Buen día a todos! Comencé a profundizar en los tipos de clases y escribí el código que contiene la clase. Esta clase contiene un método main()y una clase anidada estática. Una clase anidada estática contiene un método. El método crea una clase local. La clase local tiene un método que crea una clase anónima de la clase de marco (dudo mucho que tales perversiones tengan lugar en la práctica de la programación, pero por interés puramente deportivo decidí ser inteligente, así que por favor no tiren piedras. Antes de tiempo, en cualquier caso). Simplificado se ve así: Clases anidadas, locales y anónimas - 1
class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    static class Inner { // СТАТИЧЕСКИЙ ВЛОЖЕННЫЙ КЛАСС
        int doInnerThings() { // ЛОКАЛЬНЫЙ МЕТОД ВНУТРЕННЕГО КЛАССА
            class LocalInner { // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ КЛАСС
                int doLocalInnerThings() { // МЕТОД ЛОКАЛЬНОГО КЛАССА
                    new Outer(5) {}; // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ АНОНИМНЫЙ КЛАСС
                }
            }
        }
    }
}
Objetivo: crear una variable en una clase anónima usando una superclase de marco y "lanzar" el argumento de esta variable hasta la clase interna, asignándolo a la variable de clase interna, respectivamente. A continuación se muestra un código ligeramente ampliado, con mis bocetos.
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);
    }
}
Problema: método int doInnerThings()No puedo asignar innerValueel valor de una variable localInnerValue"de una clase local a una variable de este método LocalInner. ¡Estaría encantado de ayudar! :)
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION