2

私はちょうど内部クラスを試していて、ローカルでありながら静的な内部クラスを持つというこの考えに出くわしました...まあ、静的メソッド内に内部クラスを作成しました..まあ、それは単純です..これが私がした例です

  class Outer {

    static void m() {
        class LocalStatic {

            void s() {
                System.out.println("static local inner class method");
            }

        }
    }
}

class Demo {

    public static void main(String args[]) {

        Outer.m();
    }
}

これにより、コンパイルエラーは発生しません。

静的メソッド m にアクセスする方法を知っています。しかし、外部クラスからローカル クラスLocalStaticにアクセスする方法があるかどうか知りたい です。私の理解では、メソッド内の何かにアクセスすることはできませんよね? したがって、クラスOuterの外部からLocalStaticまたはそのローカル クラス内のメソッドまたは属性にアクセスすることはできません。

4

4 に答える 4

6

外部クラスからローカル クラス LocalStatic にアクセスする方法があるかどうか知りたい

それを行う方法はありません。ローカル クラスはまあ、ローカルなので、それらにアクセスする唯一の方法は、クラスがスコープ*内にあるメソッドからです。

非ローカル基本クラスまたはインターフェイスを使用して、ローカル クラスのオブジェクトにアクセスできます。

interface SomeInterface {
    void s();
}
class Outer {
    static SomeInterface m() {
        class LocalStatic implements SomeInterface {
            public void s() {
                System.out.println("static local inner class method");
            }
        }
        return new LocalStatic();
    }
}

今、あなたは書くことができます

SomeInterface i = Outer.m();
i.s();

デモ。

もちろんリフレクションでこれらのクラスにアクセスする方法もありますが、それはJava言語自体の能力外です。

于 2017-10-15T13:45:08.523 に答える