JavaRush /Java Blog /Random-ID /Kelas bersarang, lokal dan anonim
WhatNick
Level 17

Kelas bersarang, lokal dan anonim

Dipublikasikan di grup Random-ID
Hari baik semuanya! Saya mulai menggali lebih dalam jenis-jenis kelas dan menulis kode yang berisi kelas tersebut. Kelas ini berisi metode main()dan kelas bersarang statis. Kelas bersarang statis berisi metode. Metode ini membuat kelas lokal. Kelas lokal memiliki metode yang membuat kelas anonim dari kelas framing (saya sangat meragukan bahwa penyimpangan seperti itu terjadi dalam praktik pemrograman, tetapi demi kepentingan olahraga semata, saya memutuskan untuk menjadi pintar, jadi tolong jangan melempar batu. Sebelum waktunya, bagaimanapun juga). Secara sederhana tampilannya seperti ini: Kelas bersarang, lokal dan anonim - 1
class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    static class Inner { // СТАТИЧЕСКИЙ ВЛОЖЕННЫЙ КЛАСС
        int doInnerThings() { // ЛОКАЛЬНЫЙ МЕТОД ВНУТРЕННЕГО КЛАССА
            class LocalInner { // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ КЛАСС
                int doLocalInnerThings() { // МЕТОД ЛОКАЛЬНОГО КЛАССА
                    new Outer(5) {}; // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ АНОНИМНЫЙ КЛАСС
                }
            }
        }
    }
}
Sasaran: membuat variabel di kelas anonim menggunakan kelas super framing, dan “melempar” argumen variabel ini ke kelas dalam, menugaskannya ke variabel kelas dalam, masing-masing. Di bawah ini adalah kode yang sedikit diperluas, dengan sketsa saya.
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);
    }
}
Masalah: metode int doInnerThings()Saya tidak dapat menetapkan innerValuenilai variabel localInnerValue“ dari kelas lokal ke variabel metode ini LocalInner. Saya akan dengan senang hati membantu! :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION