「Foo 型の囲みインスタンスにアクセスできません」というエラーの原因と修正方法を教えてください。質問する

「Foo 型の囲みインスタンスにアクセスできません」というエラーの原因と修正方法を教えてください。質問する

次のコードがあります:

class Hello {
    class Thing {
        public int size;

        Thing() {
            size = 0;
        }
    }

    public static void main(String[] args) {
        Thing thing1 = new Thing();
        System.out.println("Hello, World!");
    }
}

何もしないことはわかっていますThingが、Hello, World プログラムはこれなしでも問題なくコンパイルされます。失敗するのは定義したクラスだけです。

No enclosing instance of type Hello is accessible."そして、コンパイルが拒否されます。新しい Thing を作成する行に到達します。次のいずれかだと思います:

  1. システムレベルの問題(DrJavaまたはJavaインストールのいずれか)があるか、
  2. Java で動作するプログラムを構築する方法について、基本的な誤解があります。

何か案は?

ベストアンサー1

static class Thingプログラムが動作するようになります。

現状では、Thing内部クラスとして、(定義により) の特定のインスタンスに関連付けられていますHello(使用または参照されていない場合でも)。つまり、スコープ内にnew Thing();特定のインスタンスがないと、エラーになりますHello

代わりに静的クラスとして宣言すると、それは「ネストされた」クラスとなり、特定のHelloインスタンスは必要ありません。

おすすめ記事