JavaRush /Java Blog /Random-JA /入れ子になったローカルの匿名クラス
WhatNick
レベル 17

入れ子になったローカルの匿名クラス

Random-JA グループに公開済み
全てにおいて良い日!私はクラスの種類をさらに深く掘り下げ始め、そのクラスを含むコードを書きました。このクラスには、メソッド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()代入できません。喜んでお手伝いします! :) innerValuelocalInnerValueLocalInner
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION