JavaRush /Java Blog /Random-TW /巢狀類別、本地類別和匿名類
WhatNick
等級 17

巢狀類別、本地類別和匿名類

在 Random-TW 群組發布
祝大家有美好的一天!我開始深入研究類別的類型並編寫包含該類別的程式碼。該類別包含一個方法main()和一個靜態巢狀類別。靜態巢狀類別包含一個方法。該方法建立一個本地類別。本地類有一個創建框架類的匿名類的方法(我強烈懷疑這種變態在編程實踐中發生,但出於純粹的體育興趣,我決定聰明一點,所以請不要扔石頭。無論如何,在時間之前)。簡化後看起來像這樣: 巢狀類別、本地類別和匿名類別 - 1

class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    static class Inner { // СТАТИЧЕСКИЙ ВЛОЖЕННЫЙ КЛАСС
        int doInnerThings() { // ЛОКАЛЬНЫЙ МЕТОД ВНУТРЕННЕГО КЛАССА
            class LocalInner { // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ КЛАСС
                int doLocalInnerThings() { // МЕТОД ЛОКАЛЬНОГО КЛАССА
                    new Outer(5) {}; // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ АНОНИМНЫЙ КЛАСС
                }
            }
        }
    }
}
目標:使用框架超類在匿名類別中建立一個變量,並將該變數的參數一直「扔」到內部類,分別將其指派給內部類別變數。下面是一個稍微擴展的程式碼,帶有我的草圖。

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);
    }
}
問題:方法int doInnerThings()我無法將本地類別中的innerValue變數“的值分配給該方法的變數。我很樂意提供幫助!:) localInnerValueLocalInner
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION