JavaRush /Blogue Java /Random-PT /Classes aninhadas, locais e anônimas
WhatNick
Nível 17

Classes aninhadas, locais e anônimas

Publicado no grupo Random-PT
Bom Dia a todos! Comecei a me aprofundar nos tipos de classes e escrevi o código que contém a classe. Esta classe contém um método main()e uma classe estática aninhada. Uma classe aninhada estática contém um método. O método cria uma classe local. A classe local possui um método que cria uma classe anônima da classe de enquadramento (duvido muito que tais perversões ocorram na prática de programação, mas por uma questão de interesse puramente esportivo decidi ser inteligente, então, por favor, não atire pedras. Antes da hora, em qualquer caso). Simplificado fica assim: Classes aninhadas, locais e anônimas - 1
class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    static class Inner { // СТАТИЧЕСКИЙ ВЛОЖЕННЫЙ КЛАСС
        int doInnerThings() { // ЛОКАЛЬНЫЙ МЕТОД ВНУТРЕННЕГО КЛАССА
            class LocalInner { // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ КЛАСС
                int doLocalInnerThings() { // МЕТОД ЛОКАЛЬНОГО КЛАССА
                    new Outer(5) {}; // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ АНОНИМНЫЙ КЛАСС
                }
            }
        }
    }
}
Objetivo: criar uma variável em uma classe anônima usando uma superclasse de enquadramento e “jogar” o argumento dessa variável até a classe interna, atribuindo-o à variável da classe interna, respectivamente. Abaixo está um código ligeiramente expandido, com meus esboços.
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()não consigo atribuir innerValueo valor de uma variável localInnerValue“de uma classe local para uma variável deste método LocalInner. Ficarei feliz em ajudar! :)
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION