JavaRush /Java Blog /Random-IT /Classi nidificate, locali e anonime
WhatNick
Livello 17

Classi nidificate, locali e anonime

Pubblicato nel gruppo Random-IT
Buongiorno a tutti! Ho iniziato ad approfondire i tipi di classi e ho scritto il codice che contiene la classe. Questa classe contiene un metodo main()e una classe nidificata statica. Una classe nidificata statica contiene un metodo. Il metodo crea una classe locale. La classe locale ha un metodo che crea una classe anonima della classe di framing (dubito fortemente che tali perversioni avvengano nella pratica di programmazione, ma per motivi di interesse puramente sportivo ho deciso di fare il furbo, quindi per favore non lanciate pietre. Prima del tempo, in ogni caso). Semplificato appare così: Classi nidificate, locali e anonime - 1
class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    static class Inner { // СТАТИЧЕСКИЙ ВЛОЖЕННЫЙ КЛАСС
        int doInnerThings() { // ЛОКАЛЬНЫЙ МЕТОД ВНУТРЕННЕГО КЛАССА
            class LocalInner { // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ КЛАСС
                int doLocalInnerThings() { // МЕТОД ЛОКАЛЬНОГО КЛАССА
                    new Outer(5) {}; // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ АНОНИМНЫЙ КЛАСС
                }
            }
        }
    }
}
Obiettivo: creare una variabile in una classe anonima utilizzando una super classe di framing e "lanciare" l'argomento di questa variabile fino alla classe interna, assegnandolo rispettivamente alla variabile della classe interna. Di seguito è riportato un codice leggermente espanso, con i miei schizzi.
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: metodo int doInnerThings()non riesco ad assegnare innerValueil valore di una variabile localInnerValue"da una classe locale a una variabile di questo metodo LocalInner. Sarei felice di aiutarti! :)
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION