JavaRush /Blog Java /Random-MS /Kelas bersarang, tempatan dan tanpa nama
WhatNick
Tahap

Kelas bersarang, tempatan dan tanpa nama

Diterbitkan dalam kumpulan
hari yang baik untuk semua! Saya mula menggali lebih dalam jenis kelas dan menulis kod yang mengandungi kelas. Kelas ini mengandungi kaedah main()dan kelas bersarang statik. Kelas bersarang statik mengandungi kaedah. Kaedah ini mencipta kelas tempatan. Kelas tempatan mempunyai kaedah yang mencipta kelas tanpa nama kelas pembingkaian (saya amat meragui bahawa penyelewengan sedemikian berlaku dalam amalan pengaturcaraan, tetapi demi kepentingan sukan semata-mata saya memutuskan untuk menjadi bijak, jadi tolong jangan buang batu. Sebelum masa, dalam apa jua keadaan). Dipermudahkan ia kelihatan seperti ini: Kelas bersarang, tempatan dan tanpa nama - 1

class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    static class Inner { // СТАТИЧЕСКИЙ ВЛОЖЕННЫЙ КЛАСС
        int doInnerThings() { // ЛОКАЛЬНЫЙ МЕТОД ВНУТРЕННЕГО КЛАССА
            class LocalInner { // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ КЛАСС
                int doLocalInnerThings() { // МЕТОД ЛОКАЛЬНОГО КЛАССА
                    new Outer(5) {}; // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ АНОНИМНЫЙ КЛАСС
                }
            }
        }
    }
}
Matlamat: cipta pembolehubah dalam kelas tanpa nama menggunakan kelas super pembingkaian dan "buang" hujah pembolehubah ini sehingga ke kelas dalam, masing-masing memberikannya kepada pembolehubah kelas dalam. Di bawah ialah kod yang sedikit dikembangkan, dengan lakaran 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: kaedah int doInnerThings()saya tidak boleh menetapkan innerValuenilai pembolehubah localInnerValue" daripada kelas tempatan kepada pembolehubah kaedah ini LocalInner. Saya berbesar hati untuk membantu! :)
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION